Как определить, имеет ли объект данное свойство в JavaScript

Как я могу определить ли объект x имеет определенное свойство y, независимо от значения x.y?

Я в настоящее время использую

if (typeof(x.y) !== 'undefined')

но это кажется немного неуклюжим. Существует ли лучший путь?

283
задан royhowie 26 July 2015 в 14:25
поделиться

4 ответа

Object has property:

If you are testing for properties that are on the object itself (not a part of its prototype chain) you can use .hasOwnProperty():

if (x.hasOwnProperty('y')) { 
  // ......
}

Object or its prototype has a property:

You can use the in operator to test for properties that are inherited as well.

if ('y' in x) {
  // ......
}
537
ответ дан 23 November 2019 в 01:53
поделиться

Если вы хотите узнать, содержит ли объект физически свойство @ gnarf, ответ с использованием hasOwnProperty выполнит всю работу.

Если вы хотите узнать, существует ли свойство где-либо, в самом объекте или в цепочке прототипов, вы можете использовать оператор в .

if ('prop' in obj) {
  // ...
}

Например:

var obj = {};

'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
76
ответ дан 23 November 2019 в 01:53
поделиться

You can trim that up a bit like this:

if ( x.y !== undefined ) ...
14
ответ дан 23 November 2019 в 01:53
поделиться

Одна из особенностей моего оригинального кода

if ( typeof(x.y) != 'undefined' ) ...

, которая может быть полезна в некоторых ситуациях, это то, что безопасно использовать, существует ли x или нет. Используя любой из методов в ответе gnarf, сначала следует проверить x, если есть сомнения в его существовании.

Так что, возможно, все три метода имеют место в одном мешке с трюками.

.
7
ответ дан 23 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: