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() |





