!obj[key] 在 JavaScript 中检查对象属性是否存在是一种好习惯吗?



有时,我看到这样的模式:

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

,但我发现这是非常错误的。如果obj[key]的值是false''呢?那么代码对我来说就没有任何意义了。

为什么我经常看到这种情况?为什么人们不使用.hasOwnProperty()来检查key是否作为一个对象的属性存在?

您应该使用in操作符:

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

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

obj.hasOwnProperty("key") // true

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

你是对的,如果你正在检查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

相关内容

  • 没有找到相关文章

最新更新