Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript obj.hasOwnProperty(key)与使用obj[key]直接引用_Javascript_Json - Fatal编程技术网

Javascript obj.hasOwnProperty(key)与使用obj[key]直接引用

Javascript obj.hasOwnProperty(key)与使用obj[key]直接引用,javascript,json,Javascript,Json,假设我想检查对象中是否存在属性。我在研究两种方法: 如果(object.hasOwnProperty(key)){/*执行此操作*/} 或 如果(对象[key]){/*执行此操作*/} 假设我们永远不会有object={key:false} 使用一个对象比使用另一个对象有什么好处?对象[key]检查整个对象链,包括原型链 object.hasOwnProperty(key)检查key属性是否直接分配给对象,并且不在原型链中查找 所以,使用哪一个取决于您想要的结果 查看使用对象原型上的hasOwn

假设我想检查对象中是否存在属性。我在研究两种方法:

如果(object.hasOwnProperty(key)){/*执行此操作*/}

如果(对象[key]){/*执行此操作*/}

假设我们永远不会有
object={key:false}

使用一个对象比使用另一个对象有什么好处?

对象[key]
检查整个对象链,包括原型链

object.hasOwnProperty(key)
检查
key
属性是否直接分配给对象,并且不在原型链中查找

所以,使用哪一个取决于您想要的结果

查看使用对象原型上的
hasOwnProperty
属性的简单演示


可以是任意字符串并且希望绝对确保它不会与对象原型上的内置属性冲突时,通常会使用
对象.hasOwnProperty(key)
。事实上,如果你真的想保护自己,你甚至可以使用这个
Object.prototype.hasOwnProperty.call(Object,key)
这样即使是
hasOwnProperty
属性也可以用于你的对象。当您使用Javascript对象作为具有任意键值的哈希查找或字典类型对象时,可能会出现这种情况


当您不担心这样的冲突时,您通常会使用
object[key]
,因为您知道对象上会有什么类型的键,并且您知道它们不会冲突,因为这个版本更简短,更容易阅读。

使用
object={key:false}
试试,您会看到区别。+1。我没想到。但是,我的测试用例永远不会出现这种情况。添加了一些情况,说明了为什么您会使用一个而不是另一个。非常感谢。还有,哪个会更快?我不知道哪个会更快。与所有性能问题一样,您必须针对您的特定情况设计一个有意义的测试,并在几个不同的浏览器中测量性能。