一、如何判斷是否是數(shù)組類型
1. typeof
//首先看代碼
var arr = [1,2,3];
console.log(typeof arr); //Object
上面的辦法并不能實時的檢測出是否是數(shù)組,只能判斷其類型硼被,所以說typeof
判斷基本類型數(shù)據(jù)還是挺好的,但是不能準確測試出是否是數(shù)組
2.instanceof 判斷
var arr = [1,2,3];
console.log(arr instanceof Array); //true
從輸出的效果來看渗磅,還是挺令人滿意的嚷硫,能準確的檢測出數(shù)據(jù)類型是否是數(shù)組嗎?不要高興的太早始鱼,大家先想想這個的缺點仔掸,我們接著說第三種方法
3.原型鏈方法
var arr = [1,2,3];
console.log(arr.__proto__.constructor==Array); //true
console.log(Array.prototype.isProtoTypeOf(arr)); //true
利用了原型鏈的方法,但是医清,這個是有兼容的起暮,在IE早期版本里面__proto__
是沒有定義的; 而且,這個仍然有局限性会烙,我們現(xiàn)在就來總結一下第2種方法和第3種方法局限性
4负懦、總結一下第2種方法和第3種方法局限性
instanceof
和constructor
判斷的變量,必須在當前頁面聲明的柏腻,比如纸厉,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面)五嫂,在子頁面中聲明了一個arr颗品,并將其賦值給父頁面的一個變量,這時判斷該變量沃缘,object.__proto__.constructor==Array
或者是object.instanceof Array
會返回false躯枢;
原因:
1、array屬于引用型數(shù)據(jù)槐臀,在傳遞過程中闺金,僅僅是引用地址的傳遞。
2峰档、每個頁面的Array
原生對象所引用的地址是不一樣的败匹,在子頁面聲明的Array
寨昙,所對應的構造函數(shù),是子頁面的Array
對象掀亩;父頁面來進行判斷舔哪,使用的Array
并不等于子頁面的Array
;切記槽棍,不然很難跟蹤問題捉蚤!
5.通用的方法
Array.isArray()
用于確定傳遞的值是否是一個 Array
。
假如不存在Array.isArray()
炼七,可以用如下polyfill , 如下所示:
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
具體Object.prototype.toString
的用法缆巧,請參照 Object.prototype.toString的用法
二、數(shù)組的一些常用方法
1豌拙、直接操作數(shù)組的:
shift( )
移除數(shù)組中的第一項陕悬,返回該項
unshitf( )
在數(shù)組前端添加任意個項,返回新數(shù)組的長度
push( )
在數(shù)組末尾添加任意個項按傅,返回修改后數(shù)組的長度
pop( )
刪除數(shù)組最后一項捉超,返回該項
reverse( )
反轉數(shù)組順序
splice(start, 要刪除的項,要插入的項)
對原數(shù)組進行刪除唯绍、插入拼岳、替換操作,返回刪除的項(如果沒有刪除况芒,則返回空數(shù)組)
sort([compareFun])
根據(jù)某種規(guī)則排序,默認Unicode位點排序
2惜纸、不影響原數(shù)組,只返回新數(shù)組的:
toString( )
绝骚、valueOf( )
:都返回數(shù)組的以逗號分隔的字符串
join( )
返回數(shù)組的以指定分隔符分隔的字符串
concat( )
合并數(shù)組堪簿,返回合并后的新數(shù)組
slice( start, [end])
截取數(shù)組某一段值,slice( )若不傳值皮壁,則執(zhí)行淺拷貝,start從0開始
map(callback[,thisArg])
讓數(shù)組通過某種計算,返回新的數(shù)組、
filter( callback[, thisArg])
篩選出數(shù)組中符合條件的項哪审,組成新數(shù)組
reduce( callback[, thisArg])
讓數(shù)組中前項和后項做某種運算蛾魄,并累計最終值
3、返回其他值的
forEach(callback[, thisArg])
讓數(shù)組中的每一項做一件事,返回undefined ie9+
every( callback[, thisArg])
檢驗數(shù)組中每一項是否符合條件湿滓,全部符合返回true
some( callback[, thisArg])
檢驗數(shù)組中是否有符合條件的項滴须,存在返回true
三、ES6的一些新特性
1叽奥、擴展運算符 …
console.log(…[1,2,3]) //1 2 3
將一個數(shù)組轉為用逗號分隔的參數(shù)序列
2扔水、將類數(shù)組轉化為數(shù)組的方法
- Array.from
- Array.of
ES5下可以使用方法 Array.prototype.slice.call( )
參考資料:
http://es6.ruanyifeng.com/#docs/array
https://www.cnblogs.com/leaf930814/p/6659996.html
在簡書上發(fā)布專業(yè)相關文章是對自己不斷學習的激勵;如有什么寫得不對的地方朝氓,歡迎批評指正魔市;給我點贊的都是小可愛^_^