js判斷數組類型的方法
方法一之instanceof
##instance ,故名思義,實例,例子,所以instanceof 用來判斷一個變數是否某個物件的實例,是一個三目運算式---和typeof最實質上的區別a instanceof b? alert("true"):alert("false") //注意b值是你想要判斷的那種資料型,不是一個字串,例如Array舉個栗子:var a=[]; console.log(a instanceof Array) //返回true
方法二之constructor
在W3C定義中的定義:constructor 屬性傳回建立此物件的陣列函數的參考就是傳回物件相對應的建構子。從定義上來說跟instanceof不太一致,但效果都是一樣的如: (a instanceof Array) //a是否Array的實例? true or false (a.constructor == Array) // a實例所對應的建構子是否為Array? true or false#舉個栗子:
#
function employee(name,job,born){ this.name=name; this.job=job; this.born=born; } var bill=new employee("Bill Gates","Engineer",1985); console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}
#
console.log([].constructor == Array); console.log({}.constructor == Object); console.log("string".constructor == String); console.log((123).constructor == Number); console.log(true.constructor == Boolean);
function isArray(object){ return object && typeof object==='object' && Array == object.constructor; }
! !注意:
使用instaceof和construcor,被判斷的array必須是在目前頁面上宣告的!例如,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明了一個array,並將其賦值給父頁面的一個變量,這時判斷該變量,Array == object.constructor;會回傳false;2、每個頁面的Array原生物件所引用的位址是不一樣的,在子頁面宣告的array,所對應的建構函數,是子頁面的Array物件;父頁來進行判斷,使用的Array不等於子頁面的Array;切記,不然很難追蹤問題!
方法三之特性判斷法
#以上方法都有一定的缺陷,但要相信人民大眾的智慧是無所不能及的,我們可根據數組的一些特性來判斷其類型
#
function isArray(object){ return object && typeof object==='object' && typeof object.length==='number' && typeof object.splice==='function' && //判断length属性是否是可枚举的 对于数组 将得到false !(object.propertyIsEnumerable('length')); }
ps: 在這裡普及下propertyIsEnumerable 方法:
object. propertyIsEnumerable(proName)#判斷指定的屬性是否可列舉備註:如果proName 存在於object 中且可以使用一個For…In 迴圈窮舉出來,那麼propertyIsEnumerable 屬性傳回true。如果 object 不具有所指定的屬性或所指定的屬性不是可列舉的,那麼 propertyIsEnumerable 屬性會傳回 false。 propertyIsEnumerable 屬性不考慮原型鏈中的物件。 範例:var a = new Array("apple", "banana", "cactus"); document.write(a.propertyIsEnumerable(1));
方法四之最簡單的方法
function isArray(o) { return Object.prototype.toString.call(o) === ‘[object Array]‘; }
以上是總結4種如何判斷js數組類型的方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!