Как правильно проверить наличие свойства в объекте JavaScript? - PullRequest
20 голосов
/ 22 мая 2009

У меня есть пользовательский объект Javascript, который я создаю с помощью new, и назначаю свойства на основе аргументов создания:

function MyObject(argument) {
    if (argument) {
        this.prop = "foo";
    }
}
var objWithProp = new MyObject(true); // objWithProp.prop exists
var objWithoutProp = new MyObject(false); // objWithoutProp.prop does not exist

Как правильно проверить наличие prop свойства объектов? Я видел следующие способы, но я не уверен, что любой из этих способов является лучшим:

  • if (obj.prop) {}
  • if (obj.hasOwnProperty("prop")) {}
  • if ("prop" in obj) {}

В частности, меня интересует только тестирование, если свойство явно определено для этого объекта, а не в цепочке прототипов. Кроме того, значение никогда не будет установлено на null или undefined, но это может быть что-то вроде пустого объекта или массива. Однако, если вы хотите указать правильный путь, если это так, не стесняйтесь.

Ответы [ 3 ]

30 голосов
/ 22 мая 2009

hasOwnProperty - это в точности , что вы ищете, поскольку вы указываете "если свойство явно определено для этого объекта, а не в цепочке прототипов". Согласно https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty, «этот метод можно использовать для определения того, имеет ли объект указанное свойство как прямое свойство этого объекта; в отличие от оператора in этот метод не проверяет цепочку прототипов объекта». - кажется, точно соответствует вашим требованиям!

8 голосов
/ 22 мая 2009

Если вы ищете свойство, определенное в объекте, вы можете использовать метод hasOwnProperty объекта. как это:

myObject = new MyObject();
// some code
if ( myObject.hasOwnProperty('prop') ) {
    // prop exists
}

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

другой способ - проверить свойство на неопределенное значение. как это:

if ( myObject.prop !== undefined ) {
    // prop exists
}

не забудьте использовать оператор! == вместо! =, Потому что! = Не будет отличаться от нуля до неопределенного, но! == делает поэтому, если у вашего объекта есть свойство, но значение равно нулю,! = вам не поможет. так что этот тест:

if ( myObject.prop ) {
}

может иметь неверные результаты, если «prop» имеет значение false или null. но, сравнивая с undefined с оператором! ==, вы можете быть уверены, что нулевые / ложные значения вас не смущают.

2 голосов
/ 04 апреля 2016

Вы можете проверить наличие variable следующим образом:

if ( typeof variable === 'undefined' || variable === null ) {
    // Do stuff
}

Это также может быть использовано для properties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...