在說明如何判斷乙個物件為陣列型別前,我們先鞏固下js的資料型別,js一共有六大資料型別:number、string、object、boolean、null、undefined。
除了前四個型別外,null、物件、陣列返回的都是object型別;對於函式型別返回的則是function,再比如typeof(date),typeof(eval)等。接下來進入正題,js判斷陣列型別的方法。
方法一: 使用instanceof方法
instanceof 用於判斷乙個變數是否某個物件的例項,左邊運算元是乙個物件,右邊運算元是乙個函式物件或者函式構造器。原理是通過判斷左運算元的物件的原型鏈上是否具有右運算元的建構函式的prototype屬性。
a instanceof b?alert(「true」):alert(「false」) //注意b值是你想要判斷的那種資料型別,不是乙個字串,比如array。
舉乙個例子:
var arr=;
console.log(arr instanceof array) //返回true
方法二: 使用constructor方法
在w3c定義中的定義:constructor 屬性返回對建立此物件的陣列函式的引用,就是返回物件相對應的建構函式。從定義上來說跟instanceof不太一致,但效果都是一樣的。
那麼判斷各種型別的方法:
console.log(.constructor == array); //true
console.log({}.constructor == object); //true
console.log("string".constructor == string); //true
console.log((123).constructor == number); //true
console.log(true.constructor == boolean); //true
注意:
使用instaceof和construcor,被判斷的array必須是在當前頁面宣告的!比如,乙個頁面(父頁面)有乙個框架,框架中引用了乙個頁面(子頁面),在子頁面中宣告了乙個array,並將其賦值給父頁面的乙個變數,這時判斷該變數,array ==object.constructor;會返回false;
原因:1、array屬於引用型資料,在傳遞過程中,僅僅是引用位址的傳遞。
2、每個頁面的array原生物件所引用的位址是不一樣的,在子頁面宣告的array,所對應的建構函式,是子頁面的array物件;父頁面來進行判斷,使用的array並不等於子頁面的array。
方法三: 使用object.prototype.tostring.call(arr) === '[object array]'
方法
function isarray(o)
var arr=[2,5,6,8];
var obj=;
var fn = function () {}
console.log(isarray(arr)); //[object array]
console.log(isarray(obj)); //[object object]
console.log(isarray(fn)); //[object function]
方法四:es5定義了array.isarray:
array.isarray() //true
js判斷是否為陣列
var array 1,2,3 console.log array instanceof array 父子頁面陣列賦值,可能無效 console.log array.constructor array 父子頁面陣列賦值,可能無效 console.log array.proto constructor...
js判斷變數型別是否為陣列
判斷變數的型別是最經常使用的方法,但是判斷的方式有很多。1.typeof var ary 1,2,3,4 console.log typeof ary 輸出 object 很明顯,typeof只能檢測基本資料型別,並不能檢測出來是否為陣列。2.instanceof var ary 1,2,3,4 c...
js判斷變數型別是否為陣列
判斷變數的型別是最經常使用的方法,但是判斷的方式有很多。1.typeof var ary 1,2,3,4 console.log typeof ary 輸出 object 很明顯,typeof只能檢測基本資料型別,並不能檢測出來是否為陣列。2.instanceof var ary 1,2,3,4 c...