Javascript! Instancia de declaración If

Resuelto ryandlf asked hace 12 años • 3 respuestas

Esta es una pregunta realmente básica, solo para satisfacer 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 utilizar NOT ! frente a la instancia. Por lo general, la forma en que tengo que configurar esto es la siguiente:

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.

ryandlf avatar Jan 16 '12 11:01 ryandlf
Aceptado

Encierre entre paréntesis y niegue por fuera.

if(!(obj instanceof Array)) {
    //...
}

En este caso, el orden de precedencia es importante. Ver: Precedencia de operadores .

El !operador precede al instanceofoperador.

Sergio Tulentsev avatar Jan 16 '2012 04:01 Sergio Tulentsev
if (!(obj instanceof Array)) {
    // do something
}

Es la forma correcta de comprobarlo, como ya han respondido otros. Las otras dos tácticas que se han sugerido no funcionarán y deben entenderse...

En el caso del !operador sin corchetes.

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 precede al instanceofoperador. Entonces, !objevaluado a falseprimero (es equivalente a ! Boolean(obj)); entonces estás probando si false instanceof Array, lo cual obviamente es negativo.

En el caso del !operador ante el instanceofoperador.

if (obj !instanceof Array) {
    // do something
}

Este es un error de sintaxis. Los operadores como !=son un operador único, a diferencia de un NO aplicado a un EQUALS. No existe tal operador de !instanceofla misma manera que no existe ningún !<operador.

chrismichaelscott avatar Mar 12 '2013 11:03 chrismichaelscott