una practica operadores logicos ejemplo cual buena booleanos javascript

practica - Conflicto de valores booleanos de una matriz de JavaScript vacía



operadores logicos javascript (2)

El primero:

[] == false

El operador == escribe la conversión a sus operandos, en este caso ambos lados se convierten a Número, los pasos tomados en el Algoritmo de comparación de igualdad abstracta serían:

  • objeto == booleano
  • objeto == número
  • cadena == número
  • número == número

En codigo:

[] == false; // convert false to Number [] == 0; // convert [] to Primitive (toString/valueOf) "" == 0; // convert "" to Number 0 == 0; // end

La segunda comparación, [] se convierte en primitiva, sus métodos valueOf y toString se ejecutan, pero como valueOf en objetos Array, devuelve el objeto en sí (se hereda de Object.prototype ), se usa el método toString .

Al final como puede ver, ambos operandos se convierten en Número, y ambos rinden cero, por ejemplo:

Number([]) == 0; Number(false) == 0;

Y la matriz vacía produce cero cuando se convierte en Número porque su representación de cadena es una cadena vacía:

[].toString(); // ""

Y una cadena vacía convertida en Número arroja cero:

+""; // 0

Ahora, la doble negación ( !![] ) produce verdadero porque todas las instancias de objeto son verdaderas:

![]; // false, [] is truthy !![]; // true, negation

Los únicos valores que son falsey son:

  • null
  • undefined
  • 0
  • NaN
  • "" (una cadena vacía)
  • false

Cualquier otra cosa producirá true cuando se convierte a Boolean.

Ver también:

¿Alguien puede explicar por qué las dos afirmaciones siguientes se evalúan como verdaderas ?

[] == false

y

!![]

Esta pregunta es puramente por curiosidad sobre por qué ocurre esto y no sobre cómo probar mejor si una matriz está vacía.


[] == falso

En este caso, el tipo del lado izquierdo es el objeto, el tipo del lado derecho es booleano. Cuando se compara el objeto con (== La Comparación de Igualdad Abstracta) booleano, Javascript primero convierte el valor booleano a un número, produciendo 0. Luego convierte el objeto a un "primitivo", produciendo la cadena vacía "". Luego compara la cadena vacía a 0. La cadena vacía se convierte en un número, produciendo 0, que es numéricamente igual a 0 en el lado derecho, por lo que el resultado de la expresión completa es verdadero.

Ref: http://es5.github.com/#x11.9.3 11.9.3 Algoritmo de comparación de igualdad abstracta

!! []

En este caso, Javascript convierte el objeto a boolean true, luego lo invierte, lo que da como resultado falso.