Javascript !instanceof Declaración If
Esta es una pregunta realmente básica, solo para saciar mi curiosidad, pero ¿hay alguna manera de hacer algo como esto:
if(obj !instanceof Array) {
//The object is not an instance of Array
} else {
//The object is an instance of Array
}
La clave aquí es poder usar el NOT ! delante de la instancia. Normalmente, la forma en que tengo que configurarlo es así:
if(obj instanceof Array) {
//Do nothing here
} else {
//The object is not an instance of Array
//Perform actions!
}
Y es un poco molesto tener que crear una declaración else cuando simplemente quiero saber si el objeto es de un tipo específico.
Respuesta #1
Encierra entre paréntesis y niega en el exterior.
if(!(obj instanceof Array)) {
//...
}
En este caso, el orden de precedencia es importante. Véase: Precedencia de operadores.
El operador ! precede al operador instanceof.
Respuesta #2
if (!(obj instanceof Array)) {
// do something
}
¿Es la forma correcta de verificar esto, como otros ya han respondido? Las otras dos tácticas que se han sugerido no funcionarán y deben ser entendidas...
En el caso del operador ! sin paréntesis.
if (!obj instanceof Array) {
// do something
}
En este caso, el orden de precedencia es importante (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). El operador ! tiene precedencia sobre el operador instanceof. Así que, !obj se evalúa primero como false (es equivalente a ! Boolean(obj)); luego estás probando si false instanceof Array, lo cual es obviamente negativo.
En el caso del operador ! antes del operador instanceof.
if (obj !instanceof Array) {
// do something
}
Esto es un error de sintaxis. Operadores como != son un solo operador, en contraste con un NO aplicado a un IGUAL. No existe tal operador como !instanceof de la misma manera que no existe el operador !<.
Respuesta #3
Como se explica en las otras respuestas, la negación no funciona porque:
el orden de precedencia es importante
Pero es fácil olvidar los paréntesis dobles, así que puedes acostumbrarte a hacer:
if(obj instanceof Array === false) {
//The object is not an instance of Array
}
o
if(false === obj instanceof Array) {
//The object is not an instance of Array
}
Pruébalo aquí
