Pregunta

Entiendo que usar el " === " compara el tipo, por lo que la ejecución del siguiente código da como resultado que " no es igual a " porque está comparando un tipo de número con un tipo de cadena.

var a = 20;
var b = "20";
    if (a === b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Pero no entiendo cómo usar el " == " para comparar solo los resultados de valor en el " Son iguales " mensaje.

var a = 20;
var b = "20";
    if (a == b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

¿Cómo son iguales los valores? ¿No es la cadena " 20 " almacenados como los caracteres ASCII 50 y 48 (0110010 y 0110000 en binario) y 20 almacenados como el número binario real 0010100?

EDITAR: ¡Gracias a todos! Creo que todas las respuestas son excelentes y me han ayudado a entender esto mucho mejor.

¿Fue útil?

Solución

El operador == compara solo los valores de las variables. Si los tipos son diferentes, se opera una conversión. Así que el número 20 se convierte a la cadena " 20 " Y el resultado es comparado.

El operador === compara no solo los valores, sino también los tipos, por lo que no se opera la conversión. En este caso, " 20 " ! == 20

Otros consejos

Cuando se necesita la conversión de tipo, JavaScript convierte los operandos String, Number, Boolean u Object de la siguiente manera.

  • Al comparar un número y una cadena, la cadena se convierte en un valor numérico. JavaScript intenta convertir el literal numérico de cadena en un valor de tipo Número. Primero, un valor matemático se deriva del literal numérico de cadena. A continuación, este valor se redondea al valor de tipo Número más cercano.
  • Si uno de los operandos es booleano, el operando booleano se convierte en 1 si es verdadero y +0 si es falso.
  • Si se compara un objeto con un número o una cadena, JavaScript intenta devolver el valor predeterminado para el objeto. Los operadores intentan convertir el objeto en un valor primitivo, una cadena o un valor numérico, utilizando los métodos valueOf y toString de los objetos. Si este intento de convertir el objeto falla, se genera un error de tiempo de ejecución.

El problema con la comparación == es que la versión 1.2 de JavaScript no realiza la conversión de tipos, mientras que las versiones 1.1 y 1.3 en adelante sí lo hacen.

La comparación === ha estado disponible desde la versión 1.3, y es la mejor manera de verificar la coincidencia de dos variables.

Si necesita que su código sea compatible con las versiones 1.1, 1.2 y 1.3 de JavaScript, debe asegurarse de que todas las variables coincidan como si fuera una comparación === que se estaba realizando.

El motor de JavaScript ve la a como un número y convierte la b en un número antes de la valoración.

Parte de la definición de " == " es que los valores se convertirán a los mismos tipos antes de la comparación, cuando sea posible. Esto se aplica a muchos idiomas escritos de forma holgada.

Javascript está diseñado de tal manera que una cadena que contiene números se considera " igual " a ese numero La razón de esto es la simplicidad de uso en el caso de que los usuarios ingresen un número en un campo de entrada y el sitio lo valide en JS, no tiene que convertir la cadena ingresada en un número antes de comparar.

Simplifica un caso de uso común, y el operador === todavía le permite comparar con el tipo considerado también.

Por lo que sé, JavaScript realiza la conversión automática de tipos de datos sobre la marcha, por lo que quizás las variables se conviertan automáticamente en tipos equivalentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top