2014-06-11 10 views
5

sto chiedendo questo dal retro di un Jeff Atwood tweet che presentino i seguenti risultati di nulla/zero nel confronto javascript:Qual è il ragionamento dietro le differenze di confronto zero nullo di javascript?

null zero comparison in javascript

Ho visto questo prima e divertente come lo è, Mi chiedo se ci sia in realtà una logica o un ragionamento dietro il comportamento?

+2

Voglio dire, la specifica spiega i comportamenti dell'operatore: http://es5.github.io/#x11.8 (Non ho voglia di seguire i percorsi per ogni scenario) – Ian

+0

Il tuo esempio e una rapida occhiata a http : //zero.milosz.ca/ fornisce buoni motivi per l'importanza dell'uso di '===' a meno che tu non sappia ** esattamente ** perché potresti voler utilizzare confronti liberi. – LexJacobs

risposta

7

0 == null non è mai true. Con "confronto libero" null è uguale solo a se stesso oa undefined.

Tuttavia, l'operatore relazionale converte i suoi operandi in numeri per primi, se uno di questi è un numero. Quindi, dal momento che 0 è un numero, null viene convertito in un numero. E il valore matematico a null è 0. Così si finisce a confronto

0 > 0  // nope 
0 >= 0 // yes 
0 == null // nope, null is only equal to null and undefined 
0 <= 0 // yes 
0 < 0  // nope 

Queste regole sono tutte definite nel ECMAScript specification (se hanno un senso oppure no è una questione diversa).

Problemi correlati