¿Hay algún tipo de operador "no en" en JavaScript para verificar si una propiedad no existe en un objeto? No pude encontrar nada sobre esto en Google o Stack Overflow. Aquí hay un pequeño fragmento de código en el que estoy trabajando donde necesito este tipo de funcionalidad:
var tutorTimes = {};
$(checked).each(function(idx){
id = $(this).attr('class');
if(id in tutorTimes){}
else{
//Rest of my logic will go here
}
});
Como puede ver, estaría poniendo todo en la else
declaración. Me parece incorrecto configurar una declaración if
- else
solo para usar la else
porción.
var id = ...
en su función.Respuestas:
Simplemente niegue su condición y obtendrá la
else
lógica dentro deif
:fuente
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
"se ve" mejorComo ya dijo Jordão, solo niega:
Nota: La prueba anterior si tutorTimes tiene una propiedad con el nombre especificado en id, en cualquier lugar de la cadena de prototipos. Por ejemplo,
"valueOf" in tutorTimes
devuelve verdadero porque está definido en Object.prototype .Si desea probar si una propiedad no existe en el objeto actual, use hasOwnProperty:
O si puede tener una clave que es hasOwnPropery , puede usar esto:
fuente
if(!tutorTimes.hasOwnProperty('id')) ...
?id
es una variable que podría tener cualquier valor,'id'
es una cadena con las dos letras i y d , por lo quehasOwnProperty(id)
comprueba si existe la propiedad especificada en la variable id , yhasOwnProperty('id')
comprueba si hay una propiedad llamada id.Personalmente encuentro
más fácil de leer que
Pero ambos funcionarán.
fuente
Dos posibilidades rápidas:
o
fuente
'undefined' === typeof xxx
lugar.undefined
No es una palabra reservada y en realidad es una variable global que se puede sobrescribir (que conduce a errores difíciles de encontrar)'foo' in myObj)
myObj['foo']
podría existir como una propiedad y simplemente establecerse enundefined
(es decir, con la declaraciónmyObj.foo = undefined
). Si realmente quiere ver si la propiedad en sí no existe, necesita la!('foo' in myObj)
notación.myObj.foo === undefined
es mucho más rápida (aunque potencialmente peligrosa): jsperf.com/not-in-vs-is-undefined .=== undefined
. Muchas cosas pueden romperse si las personas abusan de un lenguaje de programación haciendo cosas como, por ejemplo, sobrescribirundefined
en JavaScript. Además, consulte: stackoverflow.com/questions/8783510/…