2010-07-30 18 views

risposta

17

Gli operatori relazionali (>= e <=), eseguire coercizione di tipo (ToPrimitive), con un tipo di suggerimento Number, tutti gli operatori relazionali presenti hanno questo comportamento .

È possibile visualizzare i dettagli interni di questo processo nello The Abstract Relational Comparison Algorithm.

D'altra parte, il Equals operator (==), se un operando è null restituisce solo true se l'altro è uno null o undefined, nessun tipo coercizione numerico è fatto.

null == undefined; // true 
null == null; // true 

verificare i dettagli interni di questo processo nel The Abstract Relational Comparison Algorithm.

articoli consigliati:

+0

OK. ">", "<" valuti null come 0. "==" no. Grazie. – Eonil

+0

Un'altra cosa interessante è che a> = b non è valutato come ((a> b) || (a == b)) ma come! (a = 0 non è uguale a> o ==. – bschandramohan

2

Quando null viene utilizzato in una serie numerica, passa a 0, ciò spiega i casi> e> =.

== è più sottile. Informalmente, null non è uguale a zero, quindi ha un senso.

+0

[This] (http://bclary.com/2004/11/07/#a-11.8) è un collegamento molto molto utile per comprendere i passi compiuti nell'utilizzo di questi operatori. Ancora non spiega la logica folle, ma meh ... – Stephen

4

Gli operatori di confronto relativi implica un contesto numerico, quindi in quei casi (>, >=) il null viene convertito in un numero (zero).

Nel caso ==, tuttavia, entrambi i valori sono considerati valori booleani e Javascript non ritiene che null debba essere uguale a qualsiasi altro valore "falsy". È piuttosto strano. L'algoritmo di uguaglianza per == ha un sacco di casi speciali e null è uno di quelli. È solo == per se stesso e undefined.

0

Interessante! Sembra che Javascript abbia bisogno di un paio di nuovi operatori di identità come >== e <==. Anche se non sono sicuro che avrebbe molto senso, date le implicazioni numeriche di > e <.

Questo dà il risultato atteso ...

(null > 0 || null === 0);