我看过一些专门针对hasOwnProperty
的帖子,但我仍然怀疑它是否(以及何时)应该用于简单的obj.prop
if (obj.hasOwnProperty("prop"))
对于检查对象是否定义了非继承属性prop
非常有用,但是它比仅仅if (obj.prop)
更好吗?
当您拥有嵌套对象时,梯形图特别有用。例如,如果您有一个对象superheros
,其属性为dcComics
,并且该属性中有另一个属性batman
要检查是否使用hasOwnProperty
设置了蝙蝠侠,您必须:
if (superheros.hasOwnProperty("dcComics") && superheros.dcComics.hasOwnProperty("batman") {...}
使用简单的道具检查:
if (superheros.dcComics && superheros.dcComics.batman)
在大多数情况下,当您没有定义自己的js对象时,只使用obj.prop
是否可以接受?
答案 0 :(得分:1)
obj.prop
将遵循原型链。
obj.hasOwnProperty
只关注它自己的属性。
答案 1 :(得分:0)
JimmyRare是对的。您的问题假定这两种方法的目的是获得相同的结果,而不是这些结果。 hasOwnProperty用于确保对象本身具有该属性,而不是其原型祖先之一。即使您正在处理1级对象,他们仍然不会这样做。更好的相似之处是
if (obj.hasOwnProperty('prop'))
VS
if (typeof obj.prop !== 'undefined')