0

我看过一些专门的帖子,hasOwnProperty但我仍然质疑是否(以及何时)应该在简单的obj.prop

if (obj.hasOwnProperty("prop"))对于检查对象是否定义了非继承属性很有用,prop但这是否比简单地做更好if (obj.prop)

当您有嵌套对象时,梯子特别有用。例如,如果您有一个对象,该对象superheros具有 的属性,dcComics并且在该属性内具有batman

要检查是否设置了 batman,hasOwnProperty您必须:

if (superheros.hasOwnProperty("dcComics") && superheros.dcComics.hasOwnProperty("batman") {...}

使用简单的道具检查:

if (superheros.dcComics && superheros.dcComics.batman)

在大多数情况下,当您不定义自己的 js 对象时,只使用 js 是否可以接受obj.prop

4

2 回答 2

1

obj.prop如果属性不在其自身上,则将遵循原型链。 obj.hasOwnProperty只寻找它自己的属性。

于 2015-10-06T17:48:30.907 回答
0

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

if (obj.hasOwnProperty('prop'))

对比

if (typeof obj.prop !== 'undefined')
于 2015-10-06T17:55:11.517 回答