判断数据类型的方法
JS中数据类型的判断 typeof instanceof constructor Object.prototype.toString.call()
1. typeof关键字
- 使用
typeof
关键字判断数组类型不够准确,数组类型判断得使用 Array.isArray()
方法
2. instanceof关键字
- obj instanceof Object,左边操作数obj为对象(如果不小心写成基本类型 比如数字啥的,就会返回false)右边操作数Object为函数对象或者是函数构造器,否则抛出TypeError。
- 实质就是:instanceof操作符判断左操作数对象的原型链上是否有右边这个构造函数的prototype属性,也就是 说指定对象是否是某个构造函数的实例,最后返回布尔值,这个对整个原型链上的对象都是有效的,由于* instanceof对整个原型链上的对象都有效,因此同一个实例对象,可能会对多个构造函数都返回true!
3. constructor
fubction Fruit () {
}
Fruit.prototype= new Array()
var apple = new Fruit()
console.log('Fruit.constructor', Fruit.constructor)
// Fruit.constructor ƒ Function() { [native code] }
console.log('apple.constructor', apple.constructor)
// apple.constructor ƒ Array() { [native code] }
- 用costructor来判断判断 null 和 undefined 会报错。若再去改变对象的constructor,也显得不靠谱了
4. Object.prototype.toString.call()
- 判断 null undefined 也不会报错,即使改变了constructor没问题了。