Pregunta interesante sobre Javascript: cuando se utiliza a, se imprimirá el resultado

 pregunta:

        var a = ? ;
        if (a == 1 && a == 2 && a == 3) {
            console.log('小样儿!')
        }

Cuando a es igual a qué, ¿se establece e imprime la condición if?

Cuando vi esta pregunta por primera vez, estaba confundido. El valor de a en realidad seguiría acumulándose con las condiciones de juicio. Entonces, mi cerebro estaba funcionando rápido. ¿Qué tipo de datos seguirían cambiando con la operación? No pude pensar en esos datos después de pensarlo mucho, así que tuve que usar métodos inteligentes.

 respuesta:

Método 1: utilizar la conversión de tipo de objeto

        var a = {
            num: 1,
            toString: function () {
                return a.num++
            }
        };
        a.join = a.shift
        if (a == 1 && a == 2 && a == 3) {
            console.log('小样儿!')
        }

explicar:

a == 1 && a == 2 && a == 3 es un operador AND lógico de cortocircuito, lo que significa que el juicio continuará hacia la derecha solo cuando la condición de la izquierda sea verdadera; de lo contrario, toda la condición será falsa . Por lo tanto, el primer valor de a debe ser 1 para continuar juzgando hacia la derecha. Se puede ver que el valor de a o el valor después de la conversión de tipo puede crecer por sí solo. Al comparar valores de diferentes tipos en Javascript, Intentará convertirlos al mismo tipo de acuerdo con las reglas de conversión de tipos y luego comparará. Por ejemplo, al comparar el tipo de objeto con el tipo de número, el tipo de objeto se convertirá al tipo de número. Durante la conversión, intentará llamar al método Object.valueOf() y al método Object.toString() para obtener el tipo básico numérico correspondiente. En el código anterior, la conversión lógica primero llama al método Object.valueOf(). Si se devuelve un objeto, luego se llama al método de encabezado toString(). Cada comparación ejecutará el método del objeto anulado toString(). Este método primero devuelve el valor del atributo num y luego lo incrementa. Cuando se ejecuta a==1, el objeto a llama al método toString() y devuelve el valor num del atributo como 1. En este momento, se establece a==1, y luego se incrementa a.num, y así sucesivamente, ejecuta un Se establecerán ==2 y a== 3, y el resultado, naturalmente, se imprimirá.

Método 2: utilizar valores de matriz y conversión de tipos

        var a = [1, 2, 3, 4];
        a.join = a.shift
        if (a == 1 && a == 2 && a == 3) {
            console.log('小样儿!')
        }

explicar:

En JavaScript, casi todos los objetos son instancias del tipo Objeto y todos Object.prototypeheredan propiedades de ellos, por lo que Array también es una clase heredada de objetos. Hereda los métodos valueOf() y toString() de Object, y anula toString() método.

La oración a.join = a.shift significa que cuando la matriz llama indirectamente al método join () porque llama al método toString (), el método shift () reemplaza el método join (), lo que equivale a cambiar el valor de la matriz a Elimina el primer elemento y devuelve el primer elemento. Entonces, al juzgar a == 1, el primer elemento en realidad se elimina de la matriz original y el valor del primer elemento se devuelve para el juicio, de modo que la matriz original se convierte en [2,3,4]; luego a = 2 es equivalente a eliminar el primer elemento de la nueva matriz [2,3,4] y devolver el primer elemento para su juicio; luego juzgue a==3. De esta manera, cada condición de juicio se puede establecer cada vez, por lo que se imprimirá el resultado.

Supongo que te gusta

Origin blog.csdn.net/Celester_best/article/details/125436556
Recomendado
Clasificación