战斗:hasOwnProperty vs obj.prop

时间:2015-10-06 17:43:02

标签: javascript hasownproperty

我看过一些专门针对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是否可以接受?

2 个答案:

答案 0 :(得分:1)

如果属性本身不存在,

obj.prop将遵循原型链。 obj.hasOwnProperty只关注它自己的属性。

答案 1 :(得分:0)

JimmyRare是对的。您的问题假定这两种方法的目的是获得相同的结果,而不是这些结果。 hasOwnProperty用于确保对象本身具有该属性,而不是其原型祖先之一。即使您正在处理1级对象,他们仍然不会这样做。更好的相似之处是

if (obj.hasOwnProperty('prop'))

VS

if (typeof obj.prop !== 'undefined')