2010-07-30 11 views

Respuesta

17

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:

+0

OK. ">", "<" evalúa nulo como 0. "==" no. Gracias. – Eonil

+0

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

2

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.

+0

[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

4

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.

0

¡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); 
Cuestiones relacionadas