You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
variframe=document.createElement('iframe');document.body.appendChild(iframe);xArray=window.frames[window.frames.length-1].Array;vararr=newxArray(1,2,3);// [1,2,3]// Correctly checking for ArrayArray.isArray(arr);// trueObject.prototype.toString.call(arr);// true// Considered harmful, because doesn't work though iframesarrinstanceofArray;// false
1. Object.prototype.toString.call()
每一个继承 Object 的对象都有
toString
方法,如果toString
方法没有重写的话,会返回[Object type]
,其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用toString
方法时,会直接返回都是内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。
更多实现可见 谈谈 Object.prototype.toString
2.typeof
typeof是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。
typeof运算符的返回类型为字符串,值包括如下几种:
总结:typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回'object',有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符,后续记录instanceof运算符的相关用法。
3. instanceof
instanceof
的内部机制是通过判断对象的原型链中是不是能找到类型的prototype
。instanceof
运算符只能用作对象的判断。使用
instanceof
判断一个对象是否为数组,instanceof
会判断这个对象的原型链上是否会找到对应的Array
的原型,找到返回true
,否则返回false
。但
instanceof
只能用来判断对象类型,原始类型不可以。并且所有对象类型 instanceof Object 都是 true。4.Array.isArray()
当检测Array实例时,
Array.isArray
优于instanceof
,因为Array.isArray
可以检测出iframes
Array.isArray()
是ES5新增的方法,当不存在Array.isArray()
,可以用Object.prototype.toString.call()
实现。The text was updated successfully, but these errors were encountered: