假设我有这个:
var person = { "name": "John Doe", "email": "john.doe@example.com" };
该对象只有两个元素,分别是name
和email
。有些人也有 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
does 存在但它是 false
或 null< 也会失败
或 ''
或 0
。我想知道是否有些人是不是完全错了。
请注意,已知 person
是此处存在的对象,但 person.age
可能存在也可能不存在。
最佳答案
让我们检查一下这些检查对象是否具有特定元素或属性的方法的可靠性:
如果 Boolean(person.age)
为 false
则可能会失败
if (person.age) { ... }
如果 person.age
为 null
或 undefined
,这可能会失败
if (person.age != undefined) { ... }
如果 person.age
是 undefined
,这些可能会失败
if (person.age !== undefined) { ... }
if (typeof(person.age) != 'undefined') { ... }
另一方面,hasOwnProperty() 方法返回一个 boolean
指示对象是否具有指定的属性作为自己的(非继承的)属性。所以它不依赖于 person.age
属性的值。所以这是最好的方法
if (person.hasOwnProperty('age')) { ... }
如果你想进一步检查一个对象是否有一个可迭代的属性(所有属性包括自己的属性和继承的属性)然后使用 for..in
循环将给你想要的结果。
关于javascript:检查对象是否具有特定元素或属性的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425072/