¿Por qué los operadores de comparación no consideran que las cadenas vacías o los números no enteros sean errores?
Ejemplo:
var x = “”; if (x>=1 && x<=10){ console.log(x); //validation code: error is expected to be thrown as variable x is not an integer } else { console.log(“Error: ” + x); } Lenguaje de codificación: JavaScript (vainilla)
Nivel de habilidad: Principiante
Editor: Código de Visual Studio
Sistema operativo: Windows 7
Del MDN : "JavaScript es un lenguaje dinámico y de tipo flexible. Las variables en JavaScript no están directamente asociadas con ningún tipo de valor en particular, y cualquier variable puede tener asignados (y reasignados) valores de todos los tipos".
En el caso de las comparaciones, esto tiene un efecto secundario : "En la mayoría de los casos, si los dos operandos no son del mismo tipo, JavaScript intenta convertirlos a un tipo apropiado para la comparación".
Al comparar una cadena con un número, Javascript intentará convertir esa cadena en un valor numérico para la comparación. Se considera que las cadenas vacías tienen el valor numérico 0 .
Si separa su declaración if en dos comparaciones separadas, verá que:
x >= 1 es false (porque 0 es menor que 1 )
x <= 10 es true (porque 0 es menor o igual que 10 )
Esta conversión de tipo implícita es la razón por la que no obtendrá un error de tipo. Pero dado que ambas condiciones de su declaración if no pueden ser true al mismo tiempo para una cadena vacía, obtendrá el error que registra desde la rama else .
En mi opinión, el valor de x es similar a NULL y los operadores de comparación no consideran la condición x >=1 && x<=10 como comparación con NULL. Nuevamente, es solo mi opinión.
var x = “”; // x is similar to NULL here if (x>=1 && x<=10){ console.log(x); //validation code: error is expected to be thrown as variable x is not an integer } else { console.log(“Error: ” + x); } here