Bloc contre objet dans l'interprétation JavaScript de {}
Lors de l'analyse du code, JavaScript est confronté à l'ambiguïté d'interpréter "{}" soit comme un bloc vide ou un objet vide. Pour déterminer quelle interprétation utiliser, JavaScript suit la grammaire définie dans ses spécifications.
Selon la spécification du langage, une Statement peut prendre la forme d'un Block, d'un VariableStatement, d'un EmptyStatement ou d'un ExpressionStatement. Un bloc est défini comme "{}" suivi d'une liste facultative d'instructions terminées par "}".
Par conséquent, lorsque JavaScript rencontre "{}", il le considère d'abord comme un bloc car "{} " correspond à la syntaxe d'un bloc. Ce n'est que si l'analyseur ne peut pas l'interpréter comme un bloc qu'il considérera le {} comme un objet vide, qui relève de la catégorie ExpressionStatement.
Dans l'exemple fourni, "{}[]" est interprété comme un bloc vide suivi d'un plus unaire et d'un tableau vide. Le bloc vide ne fait rien, le tableau est converti en une chaîne vide, qui est ensuite convertie en nombre (0).
Firebug interprète cette entrée comme une instruction, ce qui donne un bloc vide qui est évalué comme indéfini. D'un autre côté, Node.js le traite comme une expression, incapable de l'analyser comme un bloc, et l'évalue comme {}.
Cette divergence résulte de différentes interprétations de l'entrée par les moteurs JavaScript respectifs. Les outils de développement Firebug et Chrome le traitent comme une instruction, considérant le {} comme un bloc vide, tandis que Node.js le traite comme une expression, ce qui donne un objet vide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!