Есть ли в JavaScript оператор not для проверки свойств объекта?

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

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.

Ответ 1

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

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

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

Ответ 2

Как уже сказал Jordão, просто отрицайте это:

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)) { ... }

Ответ 3

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

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

или

if(myObj['foo'] === undefined) { ... }

Ответ 4

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

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

легче читать, чем

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

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