0

时不时地,我看到这种模式:

if (!obj[key]) {
    // key does not exist inside object
    obj[key] = ...
} else {
    // maybe do something else with obj[key]
}

但我发现它非常错误。如果实际上 obj[key] 有值falseor''怎么办?那么代码对我来说没有任何意义。

我经常看到这个有什么原因吗?为什么人们不使用.hasOwnProperty()来检查 a 是否key作为对象的属性存在?

4

2 回答 2

0

您应该使用in运算符:

"key" in obj // true, regardless of the actual value

如果您想特别测试对象实例的属性(而不是继承的属性),请使用 hasOwnProperty:

obj.hasOwnProperty("key") // true

对于在,hasOwnProperty 和 key 未定义的方法之间的性能比较,请查看此参考

于 2021-02-02T12:54:47.757 回答
0

你是对的,如果你正在检查key道具是否存在,那么绝对不应该使用它,有更好的选择,例如.hasOwnPropertyin运算符,例如:

const obj = { a: '' }

console.log('is key a in obj?', obj.hasOwnProperty('a'))
>>> true
console.log('is key a in obj?', 'a' in obj)
>>> true
console.log('is key a in obj?', Boolean(obj['a']))
>>> false // it's wrong, like u mentioned

console.log('is key b in obj', obj.hasOwnProperty('b'))
>>> false
console.log('is key b in obj', 'b' in obj)
>>> false
console.log('is key b in obj', Boolean(obj['b']))
>>> false
于 2021-02-02T12:58:57.033 回答