2014-11-19 12 views
5

Secondo this table in the ECMAScript standard, valori di stringa che hanno lunghezza 0 dovrebbe essere valutato come boolean false.Perché alcune stringhe non vuote restituiscono "false" in JavaScript?

Come mai, allora, queste dichiarazioni valutano a true?

"\t" == false 
" " == false 
"\n" == false 
"  " == false 

Tutte quelle stringhe avere una lunghezza maggiore di 0. Ad esempio:

Not falsey

Pur comprendendo che "0" viene valutato come false perché può essere costretto ad un numerica 0, posso' t spiegare perché queste stringhe sono false. Cosa sta succedendo?

(Ovviamente posso usare === per un confronto rigoroso, ma in questo caso nel mio codice, ho bisogno del confronto sciolto, ma non mi aspettavo una stringa non vuota da considerarsi Falsey.)

+0

In quale browser/ambiente stai vedendo questo comportamento? – iamnotmaynard

+0

probabilmente duplicati con questa pagina di StackOverflow: http: //stackoverflow.com/questions/5634372/why-is-t-n-false-in-javascript – Reza

+0

@vagueness Sì, più o meno. Sfortunatamente non si è presentato nelle mie ricerche. – Matt

risposta

9

Si utilizza confronto allentato, che esegue la conversione del tipo . Ogni volta che si confronta con un booleano, entrambi i valori vengono effettivamente convertiti in numeri (spec, steps 7 and 5). false è 0 ed ogni stringa contenente solo spazi vuoti viene convertito 0 così (quando convertito in un numero) (spec) (sorprendentemente!):

La MV di StringNumericLiteral ::: StrWhiteSpace è 0.


non mi aspettavo una stringa non vuota da considerare falsey

Confrontando un valore contro un booleano è molto diverso da conversione un valore ad un booleano. "Falsy" significa che il valore viene convertito in false quando convertito in booleano. Tuttavia, ancora una volta, nel tuo caso i valori vengono prima convertiti in numeri.

Esempio:

Number(" ") // 0 (== Number(false)) 
// vs 
Boolean(" ") // true 
+0

@RobG: ho solo indicato dove vengono convertiti i booleani, ma hai ragione, il modo in cui ho formulato la frase prima crea altre aspettative. In aggiornamento :) –

Problemi correlati