Есть ли в JavaScript какой-либо оператор «не в», чтобы проверить, не существует ли свойство в объекте? Я не мог найти ничего об этом вокруг Google или переполнения стека. Вот небольшой фрагмент кода, над которым я работаю, где мне нужна такая функциональность:
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
части.
var id = ...
в своей функции.Ответы:
Просто отрицайте свое состояние, и вы получите
else
логику внутриif
:источник
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
"выглядит" лучшеКак уже сказал Джордао, просто отрицайте это:
Примечание. В приведенном выше тесте свойство tutorTimes имеет свойство с именем, указанным в id, в любом месте цепочки прототипов. Например,
"valueOf" in tutorTimes
возвращает true, поскольку оно определено в Object.prototype .Если вы хотите проверить, не существует ли свойства в текущем объекте, используйте hasOwnProperty:
Или, если у вас есть ключ hasOwnPropery, вы можете использовать это:
источник
if(!tutorTimes.hasOwnProperty('id')) ...
?id
- это переменная, которая может иметь любое значение,'id'
представляет собой строку с двумя буквами i и d , поэтомуhasOwnProperty(id)
проверяет, существует ли свойство, указанное в переменной id , иhasOwnProperty('id')
проверяет, существует ли свойство с именем id.Лично я нахожу
легче читать, чем
но оба будут работать.
источник
Две быстрые возможности:
или
источник
'undefined' === typeof xxx
вместо этого.undefined
не является зарезервированным словом и на самом деле является глобальной переменной, которую можно перезаписать (что приводит к трудностям в поиске ошибок)'foo' in myObj)
myObj['foo']
может существовать как свойство и просто быть установленнымundefined
(т. е. с операторомmyObj.foo = undefined
). Если вы действительно хотите увидеть, не существует ли само свойство, вам нужна!('foo' in myObj)
нотация.myObj.foo === undefined
выполняется намного быстрее (хотя и потенциально опасно): jsperf.com/not-in-vs-is-undefined .=== undefined
. Многое может сломаться, если люди злоупотребляют языком программирования, выполняя такие действия, как, например, перезаписьundefined
в JavaScript. Также см .: stackoverflow.com/questions/8783510/…