檢測陣列的4種方法
阿新 • • 發佈:2018-12-12
檢測資料型別的方法請看本人的另一篇部落格
https://blog.csdn.net/xuehangongzi/article/details/82907915 下面主要介紹檢測陣列的(其中有三個方法和檢測資料型別相同) 1、instanceof instanceof 方法主要是檢測變數的原型鏈是否指向Array建構函式的prototype原型上。
var arr = [4,67,23];
arr instanceof Array //return true
補充:但是instanceof不一定能保證檢測的結果一定正確,因為只要是在原型鏈上的都會返回true ,arr instanceof Object 也返回true 2、constructor
var arr = [];
arr.constructor === Array ruturn true
但是constructor可以被重寫,所以不能確保一定是陣列
var str = 'abc';
str.constructor = Array;
str.constructor === Array // return true
而很明顯str不是陣列
3、Array.isArray() ES5 在Array上新增了檢測陣列的方法,因為是新的方法,瀏覽器有一定的相容問題
4、Object.prototype.toString.call() 終極方法,可以確保方法能檢測一定是陣列
var arr = [34,65,1];
Object.prototype.toString.call(arr) === '[object Array]' //return true
總結: 由於Array.isArray()是封裝在瀏覽器中,執行效率比較高,所以當真正需要檢測一個變數型別時,先會檢測瀏覽器是否支援Array.isArray(), 之後在用Obejct.prototype.toString()方法: 所以周全的封裝的程式碼如下:
var arr = [1,3]; function isArray(value){ if (typeof Array.isArray === "function") { return Array.isArray(value); }else{ return Object.prototype.toString.call(value) === "[object Array]"; } } alert(isArrayFn(arr));// true