判斷某個對象是不是數組


總結《JavaScriptt高級程序設計》中介紹判斷某個對象是否是數組的方法。

第一種方法:

使用instanceof操作符。instanceof操作符用來判斷要檢測對象的原型鏈上是否存在某個構造函數的prototype屬性。

語法: A instanceof B,意思是對象A的原型是否是B.prototype。如果是,返回true,如果不是,返回false。

1 var a={};
2   var b=[];
3   console.log(a instanceof Object);//true
4   console.log(b instanceof Array);//true

使用instanceof操作符有一個問題就是,它假定只有一個全局作用域。如果一個網頁中有多個框架(iframe元素),那實際上就存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的Array構造函數。如果你從一個框架向另一個框架傳入一個數組,那么傳入的數組與在第二個框架中原生創建的數組分別具有各自不同的構造函數。傳入的數組在該框架中用instanceof操作符判斷就會返回false。代碼如下:

 1   var a={};
 2   var b=[];
 3   console.log(a instanceof Object);//true
 4   console.log(b instanceof Array);//true
 5   
 6   var frame=document.createElement("iframe");//創建一個框架
 7   document.body.appendChild(frame);
 8   var c=window.frames[0].Array;//取得框架全局執行環境中的Array構造函數
 9   var d=new c();//在框架全局執行環境中創建一個數組d
10   console.log(d instanceof Array);//在當前頁面的執行環境中用instanceof操作符判斷d是否為數組,返回false
11   console.log(Array.isArray(d));//true

第二種方法:

使用ECMAScript 5新增的Array.isArray()方法。這個方法的作用就是確定某個值到底是不是數組,而不管它到底是在哪個全局執行環境中創建的。

第三種方法:

使用使用Object.prototype上的原生toString()方法判斷。

使用方法如下:

Object.prototype.toString.call(value)
該方法返回一個[object NativeConstructorName]格式的字符串。每個類在內部都有一個[[Class]]屬性,這個屬性中就指定了上述字符串中的構造函數名。
該方法不能檢測非原生構造函數的函數名,因此開發人員定義的任何構造函數都將返回[object Object]。
 1   var a={};
 2   var b=[];
 3   var frame=document.createElement("iframe");//創建一個框架
 4   document.body.appendChild(frame);
 5   var c=window.frames[0].Array;//取得框架全局執行環境中的Array構造函數
 6   var d=new c();//在框架全局執行環境中創建一個數組d
 7   console.log(Object.prototype.toString.call(a));//[object Object]
 8   console.log(Object.prototype.toString.call(b));//[object Array]
 9   console.log(Object.prototype.toString.call(d));//[object Array]
10   
11   function Person() {
12      this.name=name;
13   }
14   var n=new Person();
15   console.log(Object.prototype.toString.call(n));//[object Object]

參考:

1、js如何判斷一個對象是不是Array? http://www.nowamagic.net/librarys/veda/detail/1250

2、JavaScript中toStirng()與Object.prototype.toString.call()方法淺談 http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

3、JavaScript:Object.prototype.toString方法的原理 http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM