javascript:检查对象是否具有特定元素或属性的最佳方法?

Roc*_*uts 5 javascript properties object undefined

假设我有这个:

var person = { "name": "John Doe", "email": "john.doe@example.com" };
Run Code Online (Sandbox Code Playgroud)

该对象只有两个元素,称为nameemail。有些人也有一个元素age,但这个特定的人没有。检查这个的最好方法是什么?

  • if (person.age) { ... }
  • if (person.age != undefined) { ... }
  • if (person.age !== undefined) { ... }
  • if (typeof(person.age) != 'undefined') { ... }
  • if (person.hasOwnProperty('age')) { ... }

我知道所有这些都不一样,例如if (person.age),如果age 确实存在但它是falseornull''or也会失败0。我想知道是否有些不只是完全错误。

请注意,person此处已知为现有对象,但person.age可能存在也可能不存在。

Roh*_*wal 6

让我们检查这些检查对象是否具有某个元素或属性的方法的可靠性:

如果Boolean(person.age)是,这可能会失败false

if (person.age) { ... }
Run Code Online (Sandbox Code Playgroud)

如果person.agenull或,这可能会失败undefined

if (person.age != undefined) { ... }
Run Code Online (Sandbox Code Playgroud)

如果person.age是,这些可能会失败undefined

if (person.age !== undefined) { ... }
if (typeof(person.age) != 'undefined') { ... }
Run Code Online (Sandbox Code Playgroud)

另一方面,hasOwnProperty()方法返回一个boolean指示对象是否具有作为自己的(非继承的)属性的指定属性。所以它不取决于person.age财产的价值。所以这是这里最好的方式

if (person.hasOwnProperty('age')) { ... }
Run Code Online (Sandbox Code Playgroud)

如果您想进一步检查对象是否具有可迭代的属性(所有属性包括自己的属性以及继承的属性),那么使用for..in循环将为您提供所需的结果。