2010-11-04 20 views
2

Ceci est une question théorique, car je ne peux pas imaginer d'utilisation pratique.Will `if (x = y)` Ever Retourne faux, ou échoue en JavaScript?

je fait une déclaration aujourd'hui en gras disant que JavaScript, ce qui suit retourne toujours vrai:

if (x=y){ 
    //code 
} 

Et le //code, quel qu'il soit, sera toujours exécuté.

Ceci est la faute de frappe classique de ne pas entrer == ou même ===.

Cette fonction peut également être démontrée en C/C++, mais étant plus langues fortement typé que JavaScript, il est difficile de penser les cas où cette mission échouera. Cependant, en JavaScript, étant donné deux variables x et y, j'avais du mal à penser à une occation où cela échouerait, ou le bloc de code conditionnel ne s'exécuterait pas.

Quelqu'un?

+0

Pour le downvoter: Si jamais vous revenez, veuillez expliquer pourquoi. Downvotes sans explication sont assez inutiles. –

Répondre

14

Il (x = y) évaluerait false si y = 0, y = null, y = non définie ou y = false.

Edit: Aussi, si y = NaN

Edit: Aussi, si y = ""

+0

Pour clarifier; l'expression évalue fondamentalement la valeur de 'y', donc si' y' est égal à 'false', l'instruction sera fausse. –

+1

Ou NaN ou une chaîne vide. Tout ce qui est "falsifié": http://www.google.de/search?q=javascript+falsy – RoToRa

+0

@Tatu - bien, il définit également la valeur de "x". Cela pourrait être important. –

1

Le bloc conditionnel "x = y" sera toujours exécuter. Mais en javascript "faux", undefined, null, et 0 évaluent à faux. Donc, quand y est l'une de ces valeurs, le "// code" ne sera pas exécuté.

1
js 
js> if(x=y){ 
print('hello'); 
} 
typein:1: ReferenceError: y is not defined 
js>