¿Cómo debo entender esto?Pregunta de comparación de Javascript (null> = 0)
null>0
> false
null==0
> false
null>=0
> true
¿Cómo debo entender esto?Pregunta de comparación de Javascript (null> = 0)
null>0
> false
null==0
> false
null>=0
> true
Los operadores relacionales (>=
y <=
), realizar conversión de tipos (ToPrimitive
), con un tipo de indicio de Number
, todos los operadores relacionales actuales tienen este comportamiento .
Puede ver los detalles internos de este proceso en el The Abstract Relational Comparison Algorithm.
Por otro lado, la Equals operator (==
), si un operando es null
sólo devuelve true
si el otro es o bien null
o undefined
, no se hace ningún tipo de coacción numérico.
null == undefined; // true
null == null; // true
Comprobar los detalles interiores de este proceso en la The Abstract Relational Comparison Algorithm.
artículos recomendados:
OK. ">", "<" evalúa nulo como 0. "==" no. Gracias. – Eonil
Otra cosa interesante es que a> = b no se evalúa como ((a> b) || (a == b)) sino como! (a = 0 no es lo mismo que> o ==. – bschandramohan
Cuando se usa null en una experiencia numérica, se evalúa a 0, eso explica sus> y> casos.
== es más sutil. Informalmente, null no es lo mismo que cero, así que tiene sentido.
[Este] (http://bclary.com/2004/11/07/#a-11.8) es un enlace muy útil para comprender los pasos que se siguen al usar estos operadores. Todavía no explica la lógica loca, pero meh ... – Stephen
Los operadores de comparación relativa implican un contexto numérico, por lo que en esos casos (>
, >=
) el null
se convierte en un número (cero).
En el caso ==
, sin embargo, ambos valores se tratan como valores booleanos, y Javascript no cree que null
sea igual a cualquier otro valor de "falsy". Es un poco raro. El algoritmo de igualdad para ==
tiene un montón de casos especiales, y null
es uno de esos. Es solo ==
a sí mismo y undefined
.
¡Interesante! Parece que Javascript necesita un par de nuevos operadores de identidad como >==
y <==
. Aunque no estoy seguro de que tenga mucho sentido, dadas las implicaciones numéricas de >
y <
.
Esto da el resultado esperado ...
(null > 0 || null === 0);
'null <= 0' == true también. – Oded
¿Qué intérprete/navegador? –
Wow ............ – Eonil