javascript - validar - undefined== undefined es verdadero. Pero indefinido>=indefinido es falso?
variable null javascript (3)
El operador >=
es esencialmente la negación del operador <
. Y ambos invocan el algoritmo de comparación relacional abstracto que devuelve undefined para undefined >= undefined
como se define en el paso 3 (de a a c). En realidad, también puede ver que los operadores mayor que (-o-igual) y menor que (-o-igual) solo están diseñados para trabajar con números o cadenas .
Luego, en el paso 6. de la especificación del operador >=
, puede ver por qué devuelve falso :
Si
r
es verdadero o no definido , devuelva falso . De lo contrario, devuelve true .
Acabo de tener una pregunta más trivial.
¿Por qué undefined == undefined
devuelve true
, pero undefined >= undefined
es false
?
undefined
es igual a undefined
.
¿Pero no es igual o mayor?
Los operadores de desigualdad ( <
, >
, etc.) no pueden usarse para comparar valores que no pueden convertirse implícitamente en números. Esto incluye undefined
. La razón detrás de lo que está viendo es que, a diferencia de otros idiomas que producen un error si intenta hacer algo como esto de todos modos (es decir, TypeError
en python), JS le permite hacerlo. Sin embargo, el resultado siempre será falso.
undefined === undefined || undefined > undefined
undefined === undefined || undefined > undefined
e undefined >= undefined
, el OR en "mayor que o igual a" no es lo mismo que este OR ||
.
En lo que respecta a los operadores de comparación como >, <, >=
etc, están destinados a números y undefined
no son números, undefined
están definidos.
¿Qué esperaría como valor de retorno cuando 10 >= "Hello World"
? Por supuesto, falso, pero nuevamente 10 >= "10"
devuelve true
porque 10 == "10"
es verdadero y 10 === "10"
es falso. El "10" se puede convertir en un número, por lo que vemos el resultado que se devolvería en caso de un número real y no una cadena con números.
No hay una versión de operador de igualdad estricta para >=
diferencia de !=
Que es !==
Algunas cosas realmente extrañas y confusas suceden cuando intentas comparar null
, undefined
, NaN
. Esto es algo que la especificación de JavaScript puede ser capaz de responder y, dado que JavaScript es un lenguaje muy poco estructurado y los tipos son muy flexibles, es por eso que uno puede compare 10
y "10"
y aún obtendrá resultados que puede haber obtenido solo cuando comparó dos enteros en la mayoría de los otros idiomas.
Las preguntas y la discusión son más bienvenidas que un voto negativo directo. Gracias.