JS数据类型判断
JS数据类型判断
JunsJS 数据类型判断
typeof
可以区分基础类型,但是对于引用数据类型都会返回object
,对类会返回function
,对null
返回object
log(typeof 'Ken') // string |
instanceof
直接检测构造函数的prototype
属性是否出现在某个实例对象的原型链上。由于基础数据类型、undefined、null 没有构造函数,所以返回 false
log(123 instanceof Number) // false |
constructor
Object
的constructor
属性返回的是一个引用,指向创建这个实例对象的构造函数。
能判判断基础类型和引用类型,但是不能判断undefined
和null
const o1 = {} |
Object.prototype.toString.call()
以这种方式使用
toString()
是不可靠的;对象可以通过定义Symbol.toStringTag
属性来更改Object.prototype.toString()
的行为,从而导致意想不到的结果。
不过实际开发我们大多不会去修改他的值,所以也够用了。
每个数据类都重写了这个方法,所以必须用Object.prototype
上的方法
为什么最后要加 call()
呢?
因为 Object.prototype.toString()
返回的是调用者的类型。不论你 toString()
本身的入参写的是什么,在Object.prototype.toString()
中,他的调用者永远都是 Object.prototype
;所以,在不加 call()
情况下,我们的出来的结果永远都是 [object Object]
这里的 call()
方法, 是为了改变 Object.prototype.toString
这个函数中的 this
指向。让 Object.prototype.toString
这个方法的 this
指向我们所传入的数据。
手写
instanceof
export function myInstanceof(left, right) { |
精确判断类型
js-handwrite/blob/master/src/typeOf.js
// 精准的typeof,使用Object.prototype.toString.call() |