JS 判断是否为对象几种方法

46 阅读1分钟

toString 方式

Object.prototype.toString.call(val) === '[object Object]' // true 代表为对象

注意:这里要使用 call 方法改变作用域

constructor 方式

val?.constructor === Object // true 代表为对象

这里使用了 null 传导符(?.) 以防止出错

typeof 与 instanceof

typeof 与 instanceof 并不能完全判断一个值为对象

typeof 的取值有:

  • "undefined"——如果这个值未定义;
  • "boolean"——如果这个值是布尔值;
  • "string"——如果这个值是字符串;
  • "number"——如果这个值是数值;
  • "object"——如果这个值是对象(包括数组)或null;
  • "function"——如果这个值是函数;
  • "symbol"——如果这个值是Symbol

instanceof 操作符

[] instanceof Object // true
new Object instanceof Object // true

对于数组和对象都返回 true

proto 方式【不推荐】

__proto__属性,用来读取或设置当前对象的 prototype 对象,此属性未纳入标准,不建议使用。

val.__proto__ === Object.prototype // true 代表为对象

Object.getPrototypeOf 方式

Object.getPrototypeOf(),用来读取对象的 prototype 对象。

Object.getPrototypeOf(val) === Object.prototype // true 代表为对象