obj.hasOwnProperty(key)vs使用obj[key]直接引用
obj.hasOwnProperty(key) vs directly referencing using obj[key]
假设我想检查对象中是否存在属性。我研究了两种方法:
if(object.hasOwnProperty(key)){/*这样做*/}
或
如果(object[key]){/*这样做*/}
假设我们永远不会有object = { key: false };
使用一个与另一个相比有什么权衡?
object[key]
检查整个对象链,包括原型链。
object.hasOwnProperty(key)
检查key
属性是否直接分配给对象,并且不查看原型链。
因此,使用哪一个取决于您想要的结果。
请参阅使用hasOwnProperty
属性的简单演示:http://jsfiddle.net/jfriend00/6zhv87rk/其在对象的原型上。
当key
可以是任意字符串,并且您希望绝对确保它不会与Object原型上的内置属性冲突时,通常会使用object.hasOwnProperty(key)
。事实上,如果你真的想保护自己,你甚至可以使用这个Object.prototype.hasOwnProperty.call(object, key)
,这样即使是hasOwnProperty
属性也可以用于你的对象。当您使用Javascript对象作为具有任意键值的哈希查找或字典类型对象时,就会出现类似的情况。
当你不关心这样的冲突时,你通常会使用object[key]
,因为你知道对象上会有什么类型的密钥,而且你知道它们不会冲突,因为这个版本更短,更容易阅读。
相关文章:
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- KeyPress和Keydown在这个特定的代码上不起作用.只有key-up起作用
- Three.JS OBJ模型未显示
- ThreeJS访问加载的obj模型中的对象
- 无法在obj+mtl文件中加载纹理
- 如何获取文本框组的值,并使用jquery将它们放入(key:Value)数组中
- Php variable obj to js
- JSTree's data.rslt.obj.text()返回一个文本数组,而不是所需节点的文本
- 如何将Three.js场景中的几何体导出为已修改的OBJ
- 使用lodash从对象数组中获取uniq[key,value]
- 显示多个具有相同源javascript(map(key,value))数据的图表
- 用Div内容创建obj
- 在key up函数上将文本框值传递给javascript
- JavaScript使event.key警报event.keyCode的基本polyfill实现Chrome的现代化
- Three.js.obj阴影不起作用
- obj[key].newKey = val isn't stored
- obj.hasOwnProperty(key)vs使用obj[key]直接引用
- Javascript枚举对象值:obj.key与obj[key]的区别
- key的反义词是什么?In obj) In javascript
- 是否有一种方法可以访问JavaScript对象值而不使用obj.Key或obj[' Key ']