js之获取对象类型的几种方式

2020-03-21  本文已影响0人  shandamengcheng
  1. 通过typeof
    typeof的所有返回值包括以下几种:
  1. 通过instanceof
    instanceof的原理是,判断构造函数的原型是否在这个对象的原型链上。
    比如:

[1,2,3] instanceof Object // true
这是因为,[1,2,3]是一个Array类型实例,即,[1,2,3]的原型对象为Array.prototype,而Array.prototype这个对象中的一个内部指针(proto_),即它的原型指针指向Object.prototype,因此Object.prototype就在[1,2,3]的原型链上,因此结果为true.

  1. 通过constructor
    我们知道,在一个实例的原型对象上有一个constructor属性,指向创建这个实例的构造函数,因此,我们可以通过oject.constructor来获取它的构造函数,也就是它所属的类型。

  2. 通过Object.prototype.toString()
    Object.prototype.toString()返回的是对象类型,格式为"[object Array]',类似这样。但是这样返回的是Object.prototype的对象类型,即[object Object] . 如果想要用在每个特定的实例上,应该加上call或者apply方法,比如:Object.prototype.toString.call(obj)。这样,返回的就是obj的类型了。

> 需要注意的是:如果call或者apply里面的参数是一个数字,布尔值,或者字符串,那么返回的形式为:[object Number] [object Boolean] [object String]。这是为什么呢,因为,Object.prototype.toString()返回的是对象类型,当对基本类型的数字,布尔值和字符串进行判断时,其实质判断的是这三种类型的基本包装类型。也就是说,先把这三种基本类型转换为各自的基本包装类型,然后再进行判断。基本包装类型是对象
上一篇 下一篇

猜你喜欢

热点阅读