Existe algum tipo de operador "não incluído" no JavaScript para verificar se uma propriedade não existe em um objeto? Não consegui encontrar nada sobre isso no Google ou no Stack Overflow. Aqui está um pequeno trecho de código no qual estou trabalhando, onde preciso desse tipo de funcionalidade:
var tutorTimes = {};
$(checked).each(function(idx){
id = $(this).attr('class');
if(id in tutorTimes){}
else{
//Rest of my logic will go here
}
});
Como você pode ver, eu colocaria tudo na else
declaração. Parece-me errado configurar uma declaração if
- else
apenas para usar a else
parte.
javascript
object
properties
operators
Aaron
fonte
fonte
var id = ...
em sua função.Respostas:
Apenas negue sua condição e você obterá a
else
lógica dentro deif
:fonte
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
"parece" melhorComo já disse Jordão, negue:
Nota: O teste acima, se tutorTimes, tiver uma propriedade com o nome especificado em id, em qualquer lugar da cadeia de protótipos. Por exemplo,
"valueOf" in tutorTimes
retorna true porque está definido em Object.prototype .Se você deseja testar se uma propriedade não existe no objeto atual, use hasOwnProperty:
Ou, se você pode ter uma chave que é hasOwnPropery, pode usar isto:
fonte
if(!tutorTimes.hasOwnProperty('id')) ...
?id
é uma variável que pode ter qualquer valor,'id'
é uma string com as duas letras i e d , assim quehasOwnProperty(id)
verifica se a propriedade especificada na variável id existe, ehasOwnProperty('id')
verifica se existe uma propriedade chamada id.Pessoalmente, acho
mais fácil de ler do que
mas ambos irão funcionar.
fonte
Duas possibilidades rápidas:
ou
fonte
'undefined' === typeof xxx
vez disso.undefined
não é uma palavra reservada e, na verdade, é uma variável global que pode ser substituída (levando a erros difíceis de encontrar)'foo' in myObj)
myObj['foo']
pode existir como uma propriedade e simplesmente ser definido comoundefined
(ou seja, com a instruçãomyObj.foo = undefined
). Se você realmente deseja ver se a propriedade em si não existe, precisará da!('foo' in myObj)
notação.myObj.foo === undefined
é muito mais rápida (embora potencialmente perigosa): jsperf.com/not-in-vs-is-undefined .=== undefined
. Muitas coisas podem quebrar se as pessoas abusarem de uma linguagem de programação fazendo coisas como, por exemplo, substituindoundefined
em JavaScript. Além disso, consulte: stackoverflow.com/questions/8783510/…