Je crois que c'est juste un problème de précédence - &&
est plus contraignant que =
. Votre code est équivalent à:
if (c = ([] && c.length == 0))
{
alert('hi');
}
Il est donc attribuer c
la valeur false
plutôt que le tableau vide.
Essayez ceci:
if ((c = []) && c.length == 0)
{
alert('hi');
}
EDIT: Pour répondre à la remarque de Triptyque - Je l'ai fait essayer avant de poster :) Comme CMS dit, un tableau vide est considéré comme vrai. Essayez ceci:
if (c = [])
{
alert('empty array is true');
}
ou même ceci:
if ([])
{
alert('empty array is true');
}
J'ai vérifié la spécification avant de poster - j'été un peu surpris qu'un tableau vide est considéré comme vrai, mais il est ...
L'alerte ne s'exécuterait toujours pas dans votre deuxième exemple, car en Javascript un tableau vide est une valeur de type faux. ('[] == false') est vrai. – Triptych
Triptych: Un tableau vide n'est pas considéré comme une valeur fausse, votre exemple est un * quirk * de l'opérateur égal, essayez: '!! [] == true;', '! [] == false;', '[] == false;' – CMS
Bon edit Jon, BTW * tout * sauf, 'undefined',' null', 'NaN',' 0', une chaîne vide (et bien sûr 'false') évalue' ' true' dans une expression booléenne. – CMS