instanceof
instanceof
的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype,意思就是判断对象是否是某一数据类型(如 Array)的实例,请重点关注一下是判断一个对象是否是数据类型的实例
。
来看一个例子:
1 |
|
结果显示,只有引用类型数据Array、Function、Object
被准确判断,因为123、true、'str'
是字面量,不是实例,所以判断为 false,实例化:
1 |
|
- 需要注意的是,所有
对象类型 instanceof Object
都是 true
Array.isArray()
用来判断对象是否为数组
当检测Array
实例时,Array.isArray
优于 instanceof
,因为 Array.isArray
可以检测出 iframes
1 |
|
Object.prototye.toString.call()
每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object type],其中 type 为对象的类型。但当除了 Object 类型的对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串,所以我们需要使用 call 或者 apply 方法来改变 toString 方法的执行上下文。
1 |
|
Object.prototype.toString.call() 常用于判断浏览器内置对象时。 不过在 es6 中有方法能够修改
1 |
|
typeof
1 |
|
constructor
1 |
|
用 constructor 看似十分完美,然而只要更改对象的原型,这种方式就不可靠了
1 |
|