Javascript оператор "не в" для проверки свойств объекта - PullRequest
140 голосов
/ 02 ноября 2011

Есть ли в JavaScript какой-либо оператор "не в", чтобы проверить, не существует ли свойство в объекте? Я не мог найти ничего об этом вокруг Google или SO. Вот небольшой фрагмент кода, над которым я работаю, где мне нужны такие функции:

var tutorTimes = {};
$(checked).each(function(idx) {
    id = $(this).attr('class');
    if(id in tutorTimes) {

    }
    else {
        //Rest of my logic will go here
    }
});

Как вы можете видеть, я бы поместил все в утверждение else. Мне кажется неправильным устанавливать оператор if / else только для использования части else ...

Ответы [ 4 ]

275 голосов
/ 02 ноября 2011

Мне кажется неправильным устанавливать оператор if / else только для того, чтобы использовать порцию else ...

Просто отрицаем ваше условие, и вы получите else логика внутри if:

if (!(id in tutorTimes)) { ... }
27 голосов
/ 25 сентября 2012

Как уже сказал Джордао, просто отрицаем его:

if (!(id in tutorTimes)) { ... }

Примечание. Вышеприведенный тест, если tutorTimes имеет свойство с именем, указанным в id, везде в цепочке прототипов,Например, "valueOf" in tutorTimes возвращает true , поскольку оно определено в Object.prototype .

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

if (!tutorTimes.hasOwnProperty(id)) { ... }

Или, если у вас может быть ключ hasOwnPropery , вы можете использовать это:

if (!Object.prototype.hasOwnProperty.call(tutorTimes,id)) { ... }
13 голосов
/ 02 ноября 2011

Две быстрые возможности:

if(!('foo' in myObj)) { ... }

или

if(myObj['foo'] === undefined) { ... }
0 голосов
/ 11 апреля 2019

Лично я нахожу

if (id in tutorTimes === false) { ... }

легче для чтения, чем

if (!(id in tutorTimes)) { ... }

, но оба будут работать.

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