js判斷是否爲數組

使用多種方法判斷是否爲數組

 var obj = { }
 var arr = [];

//用constructor判斷,arr和obj本身沒有constructor屬性,但它的原型上有

    console.log(arr.constructor === Array)
console.log(obj.constructor === Array);


            //用instanceof判斷



    console.log(arr instanceof Array);
console.log(obj instanceof Array);
                    //用toString方法

console.log(Object.prototype.toString.call(arr));
console.log(Object.prototype.toString.call(obj));
console.log(Object.prototype.toString.call(obj));

第1種和第2方法在跨域時會失效,當你在多個frame中來回穿梭的時候,由於每個iframe都有一套自己的執行環境,跨frame實例化的對象彼此是不共享原型鏈的,因此導致上述檢測代碼失效

下面的代碼取自https://www.cnblogs.com/ma-shuai/p/7805264.html

var iframe = document.createElement(‘iframe’); //創建iframe
document.body.appendChild(iframe); //添加到body中
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // 聲明數組[1,2,3]
alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false
出現上述結果的原因是什麼呢?其實就是:在當前窗口引入框架,其實就是引入了window對象,當我們在判斷iframe框架裏的變量時使用arr instanceof Array 或者arr.constructor === Array,要注意這個Array是當前window對象的Array,而不是iframe裏的window.Array,所以會返回false

//用Array.isArray方法
 Array.isArray() 

ECMAScript5將Array.isArray()正式引入JavaScript,目的就是準確地檢測一個值是否爲數組。IE9+、 Firefox 4+、Safari 5+、Opera     10.5+和 Chrome都實現了這個方法。但是在IE8之前的版本是不支持的。 

綜合上述方法,自己封裝一個函數

var arr = [];
var arr2 = {};
function isArrayFn(value){
if (typeof Array.isArray === “function”) {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === “[object Array]”;
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// false
————————————————

原文鏈接:https://blog.csdn.net/dreamjay1997/article/details/80685727

發佈了24 篇原創文章 · 獲贊 29 · 訪問量 7305
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章