used - Es verdadero== 1 y falso== 0 en JavaScript?
void(0) trackid=sp-006 (10)
En JavaScript, == se pronuncia "Probablemente igual".
Lo que quiero decir es que JavaScript convertirá automáticamente Boolean en un entero y luego intentará comparar los dos lados.
Para igualdad real, use el operador ===.
Estaba leyendo un buen libro sobre JavaScript.
Comenzó con:
El tipo booleano toma solo dos valores literales: verdadero y falso. Estos son distintos de los valores numéricos, por lo que true no es igual a 1, y falso no es igual a 0.
Sin embargo, observé lo siguiente:
if(1==true)
document.write("oh!!! that''s true"); //**this is displayed**
Sé que cada tipo en JavaScript tiene un equivalente booleano.
Pero entonces, ¿cuál es la verdad?
Ah, el temido operador de comparación suelto ataca de nuevo. Nunca lo use Siempre use una comparación estricta, === o! == en su lugar.
Dato extra: 0 == ''''
Bueno == es un operador de comparación de broma y como desarrolladores de js no debemos usar == para comparar. Todas las == preguntas de comparación no son válidas para empezar.
De la especificación ECMAScript, Sección 11.9.3 El algoritmo de comparación de igualdad abstracta :
La comparación x == y, donde xey son valores, produce verdadero o falso. Tal comparación se realiza de la siguiente manera:
- Si Type (y) es booleano, devuelva el resultado de la comparación x == ToNumber (y) .
Por lo tanto, en, if (1 == true)
, la true
coacciona a un Number
, es decir, Number(true)
, lo que da como resultado el valor de 1
, produciendo el final if (1 == 1)
que es true
.
if (0 == false)
es exactamente la misma lógica, ya que Number(false) == 0
.
Esto no ocurre cuando usas el operador igual estricto ===
lugar:
11.9.6 El algoritmo de comparación de igualdad estricta
La comparación x === y, donde xey son valores, produce verdadero o falso. Tal comparación se realiza de la siguiente manera:
- Si Type (x) es diferente de Type (y), devuelve false .
En realidad, cada objeto en javascript se resuelve en verdadero si tiene "un valor real" como lo expresa W3Cschools. Eso significa todo excepto ""
, NaN
, undefined
, null
o 0
.
Probar un número contra un booleano con el operador ==
es un poco extraño, ya que boolean se convierte en numérico 1 antes de comparar, lo que desafía un poco la lógica detrás de la definición. Esto se vuelve aún más confuso cuando haces algo como esto:
var fred = !!3; // will set fred to true
var joe = !!0; // will set joe to false
alert("fred = "+ fred + ", joe = "+ joe);
no todo en javascript tiene mucho sentido;)
Es cierto que true
y false
no representan ningún valor numérico en Javascript.
En algunos idiomas (por ejemplo, C, VB), los valores booleanos se definen como valores numéricos reales, por lo que solo son nombres diferentes para 1 y 0 (o -1 y 0).
En algunos otros idiomas (por ejemplo, Pascal, C #), hay un tipo booleano distinto que no es numérico. Es posible convertir entre valores booleanos y valores numéricos, pero no ocurre automáticamente.
Javascript entra en la categoría que tiene un tipo booleano distintivo, pero por otro lado, Javascript está muy interesado en convertir valores entre diferentes tipos de datos.
Por ejemplo, aunque un número no es booleano, puede usar un valor numérico donde se espera un valor booleano. Usar if (1) {...}
funciona tan bien como if (true) {...}
.
Al comparar valores, como en su ejemplo, hay una diferencia entre el operador ==
y el operador ===
. El operador de igualdad ==
felizmente convierte entre tipos para encontrar una coincidencia, por lo que 1 == true
evalúa como verdadero porque true
se convierte en 1
. El operador de igualdad de tipo ===
no realiza conversiones de tipo, por lo que 1 === true
evalúa como falso porque los valores son de tipos diferentes.
Pruebe la estricta comparación de igualdad:
if(1 === true)
document.write("oh!!! that''s true"); //**this is not displayed**
El operador ==
realiza la conversión de un tipo a otro, el operador ===
no.
También trabaja de la otra manera. Si tú escribes:
alert(Math.pow((7>3),2));
Obtendrás un valor de 1 (o 1 cuadrado), ya que convierte el condicional directamente al valor de 1.
Use ===
para equiparar las variables en lugar de ==
.
==
verifica si el valor de las variables es similar
===
comprueba si el valor de las variables y el tipo de las variables son similares
Date cuenta cómo
if(0===false) {
document.write("oh!!! that''s true");
}
y
if(0==false) {
document.write("oh!!! that''s true");
}
dar diferentes resultados
con == esencialmente estás comparando si una variable es falsey cuando se compara con false o truthey cuando se compara con true. Si usa ===, comparará el valor exacto de las variables, así que verdadero no === 1