【问题标题】:How can I check whether an object is a "plain" object?如何检查对象是否为“普通”对象?
【发布时间】:2021-10-29 12:55:58
【问题描述】:

我不确定这个问题的正确术语是什么,所以我会尽力解释。

JavaScript 中的很多东西都是对象,比如数组和类实例化。

typeof {"a": 3}     // "object"
typeof (new foo())  // "object"
tyepof [1, 2, 3]    // "object"

如果您有一个接受对象的函数,您如何检查该对象是否是像上面的对象一样的“普通”对象,例如不是类的实例化、错误等,而只是一个普通对象?

我已经尝试检查原型,但我无法始终如一地确定一个对象是某个东西的实例化还是一个数组或类似的东西,还是一个普通对象。

任何帮助将不胜感激。

【问题讨论】:

  • @isherwood 我不这么认为,接受的答案是 [object Object] 用于构造函数对象“普通”对象。

标签: javascript object prototype


【解决方案1】:

我不知道这是否是一个全面的解决方案,但您可以检查 constructor 属性:

function foo() {}
class Bar {}

console.log(
  {}.constructor === Object, // this is the "plain" object
  [].constructor === Object,
  ''.constructor === Object,
  (new foo()).constructor === Object,
  (new Bar()).constructor === Object,
  (new Map()).constructor === Object,
  (new Set()).constructor === Object,
  (new WeakMap()).constructor === Object,
  (new WeakSet()).constructor === Object,
  (new Error()).constructor === Object,
);

(编辑:我想不出任何其他类型的对象)

【讨论】:

  • ({constructor: 1}).constructor==1,所以({constructor: 1}).__proto__ == Object.prototype 可能更防弹。
猜你喜欢
  • 1970-01-01
  • 2010-09-27
  • 2010-12-23
  • 2017-03-20
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多