try parse isnan javascript comparison binary operators ascii

javascript - isnan - parseint jquery nan



¿Cómo se consideran "20" y 20 iguales en JavaScript? (6)

El motor de JavaScript ve el a como un número y arroja la b al número antes de la valoración.

Entiendo que al usar el tipo "===" se compara, ejecutar el siguiente código da como resultado "no igual" 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 del valor en el mensaje "Son iguales".

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

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

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


JavaScript está diseñado de tal manera que una cadena que contiene números se considera "igual" a ese número. El motivo es la simplicidad de uso para el caso de los usuarios que ingresan un número en un campo de entrada y el sitio lo valida en JS; no es necesario 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.


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 es cierto para muchos lenguajes sin tipeo.


Por lo que sé, JavaScript hace una conversión automática de tipo de datos sobre la marcha, por lo que tal vez las variables se transfieran a tipos equivalentes de forma automática.


Cuando se necesita una 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 a 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 un objeto se compara con un número o cadena, JavaScript intenta devolver el valor predeterminado para el objeto. Los operadores intentan convertir el objeto a un valor primitivo, un valor de cadena o número, utilizando los métodos valueOf y toString de los objetos. Si falla este intento de convertir el objeto, se genera un error de tiempo de ejecución.

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

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

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


El operador "==" compara solo los valores de las variables. Si los tipos son diferentes, se opera una conversión. Entonces, el número 20 se convierte en la cadena "20" y el resultado se compara.

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