Búsqueda de sitios web

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í

Artículos relacionados