Maison > interface Web > js tutoriel > Explication détaillée des pièges de la syntaxe JavaScript pour les {} connaissances Processing_Basic

Explication détaillée des pièges de la syntaxe JavaScript pour les {} connaissances Processing_Basic

WBOY
Libérer: 2016-05-16 16:46:18
original
1352 Les gens l'ont consulté

Tout le monde sait à quel point la syntaxe de JavaScript est pitoyable.

Prenons d'abord une photo

Explication détaillée des pièges de la syntaxe JavaScript pour les {} connaissances Processing_Basic

Le code est le suivant :

Copier le code Le code est le suivant :

{} [] ; 🎜>[ ] {}; // "[objet Objet]"
{} [] == [] {}; // faux
({} [] == [] {}); vrai

Un gouffre de syntaxe aussi douloureux ne se trouve probablement que dans des choses étranges comme JavaScript.

Je crois que la plupart des enfants qui n'étudient pas les compilateurs JavaScript ne peuvent pas du tout le comprendre. (Au moins, je trouve ça incroyable)

Plus tard, je suis allé rendre visite à ma mère, et je m'en suis soudain rendu compte !

Ensuite, jetons un œil à ce code :

Copier le code Le code est le suivant :
{
a : 1
}

Je crois que la plupart des chaussures pour enfants penseront à première vue qu'il s'agit d'une quantité directe d'objet.

Et ce code ?

Copier le code Le code est le suivant :
{
var a = 1;
}

Le navigateur affichera-t-il une erreur de syntaxe ?

Évidemment non ! Si nous y réfléchissons attentivement, nous réaliserons qu’il s’agit d’un bloc d’instructions.

Copier le code Le code est le suivant :
if (isNumber) {
var a = 1 ;
}


À ce stade, si vous êtes enthousiaste, vous l'avez peut-être découvert : il y aura une ambiguïté dans JavaScript commençant par {.
Comment le compilateur JavaScript gère-t-il cette ambiguïté ?

Pour résoudre ce problème, la méthode d'ECMA est très simple et grossière : lors de l'analyse grammaticale, si une instruction commence par "{", elle ne sera interprétée que comme un bloc d'instructions.

C'est vraiment une façon de tricher de gérer cela !

Puisqu'il s'agit tous de blocs d'instructions, pourquoi {a:1} n'a-t-il aucune erreur grammaticale ?

En fait, ici, a est compris par l'analyseur comme une balise. Les étiquettes sont utilisées avec les instructions break et continue pour effectuer des sauts directionnels.

Par conséquent, écrire comme ceci lèvera une exception :

Copier le code Le code est le suivant :
{
a: function() {}
}

Parce que function () {} n'est pas une déclaration de fonction, ni une expression de fonction.

À ce stade, tout le monde devrait avoir une idée de base de l'étrange traitement de {}. Revenons sur les phrases évoquées en début d'article :

Copier le code Le code est le suivant :
{} [] ; 🎜>[ ] {}; // "[objet Objet]"
{} [] == [] {}; // faux
({} [] == [] {}); vrai


Le premier, parce que {} est un bloc d'instructions, le code peut être compris comme :

if (1) {}
[]


La valeur de retour est donc 0 .

Deuxièmement, puisque {} n'est pas au début de l'instruction, il s'agit d'une quantité directe d'objet normal. Le tableau vide et l'objet vide sont ajoutés directement et "[object Object]" est renvoyé.

Compris les premier et deuxième éléments, le troisième élément n'a plus besoin d'explication.

Le quatrième, parce qu'il commence par (), le premier {} est analysé comme un objet littéral, donc les deux formules sont égales et renvoient vrai.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal