Подтвердить что ты не робот

Какой правильный способ проверить наличие свойства в JavaScript-объекте?

У меня есть пользовательский объект 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, но оно может быть чем-то вроде пустого объекта или массива. Однако, если вы хотите включить то, что правильно, если это может быть так, не стесняйтесь.

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

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

if ( myObject.prop ) {
}

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

Ответ 3

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

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

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