var arr = [1, 2]; alert(arr instanceof Array);//true
以上老方法判断是否是数组,存在一个问题,就是它只适用于单执行环境(窗口),如果该窗口有其他框架(比如 iframe)则会出问题
比如:
html: <iframe frameborder="1" name="result" id="result"></iframe> script: document.querySelector('#result').src = 'demo5.html'; //下面是deml5界面代码 alert(parent.arr instanceof Array);//false alert(parent.arr instanceof parent.window.Array);//true 这样才是true
另外 js5 新增判断方法 是 Array.isArray(value) 统一了判断方法
typeof 只适用于检测基本数据类型,引用类型 统一都是object 所以,没什么用处对于检测引用类型时候
//js中一共六种数据类型 //5种基本类型 Undefined Null Boolean String Number //一种复杂类型 Object //type of 共会返回六种结果 //undrfined-- 如果这个值未定义 //boolean-- 如果这个值是布尔值 //string-- 如果这个值字符串 //number-- 如果这个值是数字 //object-- 如果这个值是对象或者null(null 被看成是一个空对象的引用) //function-- 如果这个值是函数 var str= 'aa';//typeof---string var num= 1;//typeof---number var b= true;//typeof---boolean var u;//typeof---undefined //以上是基本类型 var func= function(){}//typeof---function //以上是比较特殊的对象类型--函数类型 var n=null;//typeof---object var o= new Object();//typeof---object var arr= [1,2];//typeof---object //以上是对象类型 //所以 typeof 只适合检测基本类型 和 函数
# 严格判断方法:Object.prototype.toString.call([]); //"[object Array]"
总结:typeof 用于判断基本类型和function
instanceof 用于单一环境下 对象类型(如果用基本类型调用此方法 始终返回false)
isArray 可以跨环境判断