Как я могу определить ли объект x
имеет определенное свойство y
, независимо от значения x.y
?
Я в настоящее время использую
if (typeof(x.y) !== 'undefined')
но это кажется немного неуклюжим. Существует ли лучший путь?
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')) {
// ......
}
You can use the in
operator to test for properties that are inherited as well.
if ('y' in x) {
// ......
}
Если вы хотите узнать, содержит ли объект физически свойство @ 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
You can trim that up a bit like this:
if ( x.y !== undefined ) ...
Одна из особенностей моего оригинального кода
if ( typeof(x.y) != 'undefined' ) ...
, которая может быть полезна в некоторых ситуациях, это то, что безопасно использовать, существует ли x
или нет. Используя любой из методов в ответе gnarf, сначала следует проверить x
, если есть сомнения в его существовании.
Так что, возможно, все три метода имеют место в одном мешке с трюками.
.