2011-03-28 4 views
1
if([]){}//true 
if([]==true){}//false 
if([1]==true){}//true 
if([2]==true){}//false 
if([1,2]==true){}//false 
if(['Hi']==true){}//false 
if([{aaa:1}]==true){}//false 

[ ] est tableau. Le tableau est un objet. L'objet est vrai, donc [ ] est vrai. C'est acceptable.Tableau et si instructions

Mais je ne peux pas comprendre d'autres résultats.

+0

acceptent quelques réponses .... 1er – Neal

+0

D'accord - ne vous attendez pas les gens à aider si vous n'allez suivre le protocole SO de demander/réponse/accepter. (Nous ne nous attendons pas à 100% d'acceptation, mais 0% est ridicule) –

+0

Un tableau vide '[]' coerces à la valeur du nombre '0' je crois. –

Répondre

1
if([]){}//true 

Tous les objets JavaScript sont truthy - ils sont tous contraignent à la valeur booléenne true.


if([]==true){}//false 

Si un Opérande est un objet, et l'autre opérande est un booléen, alors les deux opérandes contraignent à une valeur numérique. Un tableau vide forcera à 0:

0 == 1 // false 

if([1]==true){}//true 

Même chose ici.Pour un tableau avec un élément, cet élément forcera à nombre et que la valeur sera comparée à l'autre opérande:

1 == 1 // true 

if([2]==true){}//false 

est:

2 == 1 // false 

if([1,2]==true){}//false 

Si le tableau contient plusieurs éléments, la contrainte sur Nombre entraînera NaN:

NaN == 1 // false 

if(['Hi']==true){}//false 

La chaîne contraint à la valeur Nombre NaN:

NaN == 1 // false 

if([{aaa:1}]==true){}//false 

Un objet contraint également à la valeur Nombre NaN:

NaN == 1 // false 
+0

C'est une bonne chose, y a-t-il une référence ou un moyen facile de tester par moi-même quelle coercition se produit? – Ryley

+0

@Ryley Il suffit de lire la spécification: http://es5.github.com/#x11.9.3 Il dit tout droit là. Les règles de coercition sont 4. - 9. –

+0

Parfait, je voulais juste m'assurer que l'information était jointe à cette réponse :) – Ryley

0
if([]==true){}//false 

[] n'est pas un booléen vrai c'est un tableau. C'est dire qu'un tableau vide EST un booléen vrai. Ce n'est pas - c'est un tableau vide.

si ([]) {} l'évalue comme étant défini et non nul.

Vérifiez ceci: http://11heavens.com/falsy-and-truthy-in-javascript

+0

C'est correct, bien que cela n'explique pas pourquoi 'if ([1] == true) {} // true'. Pour ce que je comprends, '[1]' est '1' qui est' true' – Aleadam