Regardez le code suivant:
La copie de code est la suivante:
if (! ("aa" dans la fenêtre)) {
alert («Oh mon Dieu»);
var aa = 1;
}
alert ("aa" dans la fenêtre);
alerte (aa);
Répondez aux questions suivantes:
Une erreur sera-t-elle signalée? Combien de fois cela va-t-il apparaître?
La deuxième alerte est-elle vraie ou fausse?
Qu'est-ce qui apparaît dans la troisième alerte?
Pourquoi?
Pensez-y, puis testez-le. Si vous répondez correctement, vous n'avez pas besoin de lire les articles suivants.
-----------------------------
La définition des variables dans JS est trop simple. Vous pouvez simplement utiliser un VAR, ou même sans VAR:
La copie de code est la suivante:
var a = 1;
Ici, A est le nom de la variable et 1 est la valeur de la variable. Hélas, c'est trop basique. Regardez le code suivant:
La copie de code est la suivante:
var a;
alerte (a);
Dans le test Firebug, un non-défini apparaîtra. Il s'agit d'une chaîne très familière, ce qui semble indiquer que la variable n'est pas définie. Mais je pense que je l'ai déjà valu, c'est la définition, mais il n'y a pas de valeur attachée.
Faisons quelque chose qui n'est vraiment pas défini:
La copie de code est la suivante:
alerte (a);
C'est vrai, alerte simplement une variable qui n'est jamais apparue du tout. Que se passera-t-il?
Firebug a directement signalé une erreur: A n'est pas défini. Cela signifie que A n'est pas défini. En combinant le code précédent, cela est déroutant. Quelle est la différence entre cette non définie et la précédente non définie?
En fait, le code précédent est équivalent à cela:
La copie de code est la suivante:
var a = non défini;
alerte (a);
En d'autres termes, lorsqu'une variable est déclarée sans attribuer de valeur, JS passera une valeur non définie à la variable. Notez qu'il s'agit d'une "valeur", ce qui signifie qu'une valeur a déjà une valeur, et cette valeur est appelée "non définie".
Les variables derrière l'alerte directe ne sont jamais apparues, ce qui signifie que c'est le véritable indéfini.
Autrement dit: il n'y a pas de variable sans valeur en JS, et la valeur est attribuée lorsque la variable est déclarée.
Ensuite, nous regardons le code suivant:
La copie de code est la suivante:
alerte (a);
var a = 1;
Ce code rapportera-t-il une erreur? Parce que lorsque l'alerte est alerte, la variable A n'est pas encore apparue.
Mais il n'y a pas d'erreur de cette manière, mais une valeur non définie apparaît. Cela indique que la variable a déjà, mais la valeur n'est pas ce que nous voulons, mais n'est pas définie. Quel est le problème?
Étant donné que la déclaration de variable VAR est la même que la déclaration de fonction, elle sera avancée, en fait, le code ci-dessus ressemble à ceci:
La copie de code est la suivante:
var a;
alerte (a);
a = 1;
De cette façon, vous comprendrez.
Par conséquent, la clé de ce problème est: la déclaration VAR atteindra le haut de la portée à l'avance, mais la valeur attachée ne sera pas - un paramètre très emmêlé, je ne sais pas pourquoi j'ai fait cela. Je pense personnellement que c'est un défaut de JS.
Il y a une habitude de code maintenant que les défenseurs mettent des déclarations variables devant la portée, considérant probablement cela - même si vous ne les écrivez pas devant, JS ira à l'avance.
Maintenant, permettez-moi de libérer la réponse à la question au début de l'article:
Seules deux alertes apparaîtront et l'alerte dans IF ne sera pas exécutée, car la déclaration VAR est avancée, le code réel ressemble à ceci:
La copie de code est la suivante:
var aa;
if (! ("aa" dans la fenêtre)) {
alert («Oh mon Dieu»);
aa = 1;
}
alert ("aa" dans la fenêtre);
alerte (aa);
Bien que AA soit vide, il sera vrai lorsqu'il sera jugé par «aa» dans la fenêtre, car A existe et la valeur n'est pas définie. Donc, si le code ne s'exécute pas. Je ne parlerai pas des deux dernières alertes.
Personnellement, je pense que c'est une question très absurde. Nous devons comprendre ses raisons, mais le mépriser comme un piège.
La question ci-dessus est également la raison pour laquelle j'ai écrit cet article. J'ai vu ce code à partir d'un article en ligne, mais il n'y a pas de réponse. Je ne pouvais pas battre ma sœur, alors je suis allé à Stackoverflow et j'ai demandé à le découvrir. La réponse est cet article.
Mais c'est une question très basique, en fait! ! !
Haha, pardonne-moi, il y a une autre question:
La copie de code est la suivante:
var b = {}
alerte (B.AA);
alerte (b.aa.bb);
C'est également un moyen de déclarer des variables. Alors, ce code rapportera-t-il une erreur? Pourquoi?