Battle: hasOwnProperty против 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
?
2 ответа
JimmyRare правильно. Ваш вопрос предполагает, что эти два метода предназначены для получения одного и того же результата, которым они не являются. hasOwnProperty используется для того, чтобы убедиться, что сам объект обладает этим свойством, а не один из его прототипных предков. Даже если вы имеете дело с одноуровневым объектом, они все равно не делают то же самое. Лучшее подобие было бы
if (obj.hasOwnProperty('prop'))
против
if (typeof obj.prop !== 'undefined')
obj.prop
будет следовать цепочке прототипов, если свойство не на себя.obj.hasOwnProperty
ищет только свои собственные свойства.