Búsqueda de sitios web

javascript - La negación de instanceof da resultados inesperados


¿Cuál es la diferencia entre estas dos declaraciones? Dan una salida diferente (en la consola de Google Chrome).

function Test() {
    if (this instanceof Test) {

    } else {
        return new Test();
    }
}
x = Test();

Prueba {}

function Test() {
    if (!this instanceof Test) {
        return new Test();
    }
}
x = Test();

indefinido

Mente=aturdida

Respuesta #1

El problema es que el ! se evalúa antes que el instanceof, por lo que se está tratando como:

if ((!this) instanceof Test) { ... }

Y, ya sea que !this sea true o false, ninguno de los valores es una instancia de Test, lo que impide que se devuelva new Test().

Agregar un agrupamiento forzará el orden deseado para "no es una instancia:"

if (!(this instanceof Test)) { ... }