面向对象中判断数组的方法
写在前面:如有错误多多指教!
判断数组的方法:
1.constructor
var arr=[];
alert(arr.constructor==Array)//true
2.instanceof
var arr=[];
console.log(arr instanceof Array);//true
3.toString(目前看来最稳妥的判断数组的方法)
利用toString做类型的判断
var arr =[];
alert(Object.prototype.toString.call(arr));//"[object Array]"
var arr ={};
alert(Object.prototype.toString.call(arr));//[object Object]
var arr=new Date ();
alert(Object.prototype.toString.call(arr));//[object Date]
var arr=new RegExp;
alert(Object.prototype.toString.call(arr));//[object RegExp]
var arr=null;
alert(Object.prototype.toString.call(arr));//[object Null]
//通过上面我们可以通过toString判断数组
var arr =[];
alert(Object.prototype.toString.call(arr)=='[object Array]')//true;
为什么说tostring是目前看来最稳妥的判断数组的方法?
在iframe下,第一种和第二种会判断错误
其实iframe下的arr 是数组 但是在iframe下判断就发生错误了
只有第三种判断是正确的
但是此种情况,不常见
window.οnlοad=function(){
var oF=document.createElement('iframe');
document.body.appendChild(oF);//添加到文档节点中
var ifArray = window.frames[0].Array;//找到iframe下的数组
var arr =new ifArray();//创建iframe下的数组
alert(arr.constructor==Array);//false
alert(arr instanceof Array);//false
alert(Object.prototype.toString.call(arr)=='[object Array]');//true
}