javascript
JavaScript 判断变量是否为数组Array的方法
1. 不能用typeof ,因為typeof?只能判斷基本類型,不能判斷引用類型
var?ary = [1,23,4]; console.log(typeof?ary);?//輸出結果是Object 上面的辦法并不能實時的檢測出是否是數組,只能判斷其類型,所以說typeof判斷基本類型數據還是挺好的,但是不能準確測試出是否是數組
2.instanceof 判斷
能準確的檢測出數據類型是否是數組,但是有缺點。如下解釋
3.原型鏈方法
var?ary = [1,23,4]; console.log(ary.__proto__.constructor == Array);//true console.log(ary.constructor == Array)//true 這兩段代碼是一樣的這個辦法利用了原型鏈的方法,但是,這個是有兼容的哦,在IE早期版本里面__proto__是沒有定義的哦~而且,這個仍然有局限性。
?
我們現在就來總結一下第2種方法和第3種方法局限性。
instanceof 和constructor 判斷的變量,必須在當前頁面聲明的,比如,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面),在子頁面中聲明了一個ary1,并將其賦值給父頁面的一個變量 ary2,
這時判斷該變量,Array == ary2.constructor;會返回false;
原因:
1、array屬于引用型數據,在傳遞過程中,僅僅是引用地址的傳遞。
2、每個頁面的Array原生對象所引用的地址是不一樣的,在子頁面聲明的array,所對應的構造函數,是子頁面的Array對象;父頁面來進行判斷,使用的Array并不等于子頁面的Array;切記,不然很難跟蹤問題!
4. 通用的方法
var?ary = [1,23,4]; function?isArray(o){ return?Object.prototype.toString.call(o) ==?'[object Array]'; } console.log(isArray(ary)); 5 好用的判斷類型的方式(高階函數的應用)function isType(type){
return function(o){
return Object.prototype.toString.call(o) === "[object " + type + "]";
}
}
var isArray = isType("Array");
var a = [1,2,34];
console.log(isArray(a))
轉載于:https://www.cnblogs.com/FineDay/articles/6688846.html
總結
以上是生活随笔為你收集整理的JavaScript 判断变量是否为数组Array的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hsweb提取页面查询参数_提取网页,登
- 下一篇: javascript/jquery高度宽