1. instanceof操作符(ECMAScript3)
对于一个网页,或者是一个全局作用域而言,使用instanceof操作符来检测数组就可以得到满意的结果。
语法:if(value instanceof Array){
//对数组执行某些操作
}
eg:
1 var colors=["red","pink"]; 2 var n=18; 3 var isArray=colors instanceof Array;//返回true 4 var isArray1=n instanceof Array;//返回false 5 alert(isArray); 6 alert(isArray1);
注意:
instanceof操作符在存在多个全局作用域(像一个页面包含多个框架frame)的情况下,var isArray=value instanceof Array;要返回true,value必须是数组,而且还必须与Array构造函数在同一全局作用域中。(Array是window的属性)如果value是另一个框架中定义的数组,那么会返回false。
instanceof具体的用法参考 https://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/#icomments
2. Array.isArray()方法(ECMAScript5)
语法:
if(Array.isArray(value)){
//对数组执行某些操作
}
eg:
1 var colors=["red","pink"]; 2 var n=18; 3 var isArray=Array.isArray(colors);//返回true 4 var isArray1=Array.isArray(n);//返回flase 5 alert(isArray1); 6 alert(isArray);
注意:
支持Array.isArray()方法的浏览器有IE9+,Firefox 5+,Opera 10.5+和Chrom。要在尚未实现这个方法的浏览器中准确检查数组,参考下面的方法。
由于在任何值上调用Obiect原生的toString()方法,都会返回[object NativeConstructorName]格式的字符串。
eg:
1 var colors=["red","pink"]; 2 var number1=20; 3 var obj=new Object(); 4 alert(Object.prototype.toString.call(colors));//"[object Array]" 5 alert(Object.prototype.toString.call(number1));//"[object Number]" 6 alert(Object.prototype.toString.call(obj));//"[object Object]"
由于原生的构造函数与全局作用域无关因此使用toString()就能保证返回一致的值。利用这一点,可以创建如下函数进行判断:高程书P597
1 function isArray(value){ 2 return Object.prototype.toString.call(value)=="[object Array]"; 3 }