【问题标题】:javascript: best way of checking if object has a certain element or property?javascript:检查对象是否具有某个元素或属性的最佳方法?
【发布时间】:2018-03-07 14:17:55
【问题描述】:

假设我有这个:

var person = { "name": "John Doe", "email": "john.doe@example.com" };

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

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

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

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

【问题讨论】:

  • 对我来说person.hasOwnProperty('age') :) 属性的是另一回事!
  • 那么您要准确检查什么?财产存在吗? “具有一定的价值”,如您的问题标题,将是完全不同的事情。
  • 我猜if (typeof person.age == "number") 是你要找的。​​span>
  • @Bergi 对,这令人困惑,我将标题中的“值”更改为“元素”。是的,我只是想检查该属性是否存在。
  • @RocketNuts 然后使用hasOwnPropertyin(取决于您是否关心它是否是自己的 属性)。如果您还关心属性的类型,请使用typeof

标签: javascript object properties undefined


【解决方案1】:

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

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

if (person.age) { ... }

如果person.agenullundefined,这可能会失败

if (person.age != undefined) { ... }

如果person.ageundefined,这些可能会失败

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

另一方面,hasOwnProperty() 方法返回一个boolean,指示对象是否将指定的属性作为自己的(不是继承的)属性。所以它不依赖于person.age 属性的值。所以这是最好的方式

if (person.hasOwnProperty('age')) { ... }

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

【讨论】:

    【解决方案2】:

    您可以使用Object.hasOwnProperty()。查看文档here

    【讨论】:

    • OP 已经知道,它在他的选项列表中。 为什么他应该使用hasOwnProperty
    【解决方案3】:

    您可以使用 hasOwnProperty 来检查特定的键或属性是否存在。

    var person = { "name": "John Doe", "email": "john.doe@example.com" };
    console.log(person.hasOwnProperty('age')) //false
    
    var person = { "name": "John Doe", "email": "john.doe@example.com", "age": 18 };
    console.log(person.hasOwnProperty('age')) //true
    

    如果你使用 (person.age),如果值为 false、空或 null,即使 age 属性存在并且有自己的属性检查属性是否存在,它也会给你 false

    【讨论】:

    • OP 已经知道,它在他的选项列表中。 为什么他应该使用hasOwnProperty
    • 我看到了编辑,但仍然缺少解释。
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 2016-02-22
    • 2016-12-01
    • 2014-05-08
    • 2015-08-23
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多