战斗: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')
我看过一些专门针对 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')