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 ищет только свои собственные свойства.

Другие вопросы по тегам