战斗:hasOwnProperty vs obj.prop

Battle: hasOwnProperty vs obj.prop

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

如果 属性 不在自身上,

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

JimmyRare 是正确的。您的问题假设这两种方法旨在获得相同的结果,但事实并非如此。 hasOwnProperty 用于确保对象本身具有 属性,而不是其原型祖先之一。即使您正在处理 1 级对象,它们仍然不会这样做。更好的相似度是

if (obj.hasOwnProperty('prop'))

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