JavaScript confronto relazionale tipo operatore coercizione è definita nella JavaScript specification, in particolare nelle sezioni 11.8 to 11.8.5 che descrivono gli operatori e sezioni 9.1 (ToPrimitive) e 9.3 (ToNumber) che descrivono il processo di costringere operandi.
In breve, i 4 operatori di confronto (<
, >
, <=
, e >=
) fanno del loro meglio per convertire ogni operando ad un numero, quindi confrontare i numeri. L'eccezione è quando entrambi gli operandi sono stringhe, nel qual caso vengono confrontati alfabeticamente.
In particolare,
Se un argomento o
è un oggetto al posto di un primitivo, try to convert it to a primitive value chiamando o.valueOf()
o - se o.valueOf
non è stato definito o non ha prodotto un tipo primitivo quando viene chiamato - chiamando o.toString()
Se entrambi gli argomenti sono stringhe, confrontarli in base al loro lexicographical ordering. Ad esempio, questo significa "a" < "b"
e "a" < "aa"
entrambi restituiscono true.
Altrimenti, convert each primitive to a number, il che significa:
undefined
->NaN
Null
-> +0
Boolean
tipo primitivo ->1
se true
, +0
se false
String
- >try to parse a number dalla stringa
quindi confrontare ogni elemento come ci si aspetterebbe per l'operatore, con l'avvertenza che ogni confronto che coinvolge NaN
restituisce false
.
Quindi, questo significa quanto segue:
console.log(true > null); //prints true
console.log(true > false); //prints true
console.log("1000.0" > 999); //prints true
console.log(" 1000\t\n" < 1001); //prints true
var oVal1 = { valueOf: function() { return 1; } };
var oVal0 = { toString: function() { return "0"; } };
console.log(oVal1 > null); //prints true
console.log(oVal0 < true); //prints true
console.log(oVal0 < oVal1); //prints true
Cari downvoters, si ricorda che StackOverflow [esplicitamente incoraggia chiedere e rispondere alle vostre proprie domande] (http://blog.stackoverflow.com/2011/ 07/its-ok-to-ask-and-answer-your-own-questions /), quindi gradirei un feedback che spieghi perché la mia domanda sta ricevendo voti negativi mentre la mia risposta sta ricevendo voti positivi :-) – Caspar
La tua risposta è abbastanza buona . La tua domanda ... non tanto. Ricorda, le domande auto-risposte sono effettivamente incoraggiate, ma ottenere la parte giusta è * difficile *.Se la tua domanda non è di qualità eccezionale e non è contrassegnata come wiki della comunità, potrebbe essere downvoted o addirittura chiusa. Vedi http://meta.stackexchange.com/questions/163623/what-can-i-do-to-improve-the-question-portion-of-a-self-answered-android-debuggi per esempi di ciò che puoi fare per frenare questo. –
Non ho intenzione di votare, ANCORA, voglio vedere la tua risposta a questo: come fai questa domanda e meno di 1 minuto dopo fornisci una risposta dettagliata e completa? Hai davvero avuto il dubbio? – Toping