Heim > Web-Frontend > js-Tutorial > Detaillierte Erläuterung der Fallstricke der JavaScript-Syntax für {} processing_Grundkenntnisse

Detaillierte Erläuterung der Fallstricke der JavaScript-Syntax für {} processing_Grundkenntnisse

WBOY
Freigeben: 2016-05-16 16:46:18
Original
1354 Leute haben es durchsucht

Jeder weiß, wie erbärmlich die Syntax von JavaScript ist.

Machen wir zuerst ein Foto

Detaillierte Erläuterung der Fallstricke der JavaScript-Syntax für {} processing_Grundkenntnisse

Der Code lautet wie folgt:

Code kopieren Der Code lautet wie folgt:

{} []; 🎜>[ ] {}; // "[object Object]"
{} [] == [] {}; // false
({} [] == [] {}); wahr

Eine so schmerzhafte Syntaxgrube gibt es wahrscheinlich nur bei seltsamen Dingen wie JavaScript.

Ich glaube, dass die meisten Kinder, die sich nicht mit JavaScript-Compilern beschäftigen, es überhaupt nicht verstehen können. (Zumindest finde ich es unglaublich)

Später besuchte ich meine Mutter und mir wurde es plötzlich klar!

Als nächstes schauen wir uns diesen Code an:

Code kopieren Der Code lautet wie folgt:
{
a: 1
}

Ich glaube, dass die meisten Kinderschuhe auf den ersten Blick denken werden, dass es sich hierbei um eine direkte Objektgröße handelt.

Was ist mit diesem Code?

Code kopieren Der Code lautet wie folgt:
{
var a = 1;
}

Wird der Browser einen Syntaxfehler melden?

Offensichtlich nicht! Wenn wir sorgfältig darüber nachdenken, werden wir erkennen, dass es sich hier um einen Anweisungsblock handelt.

Code kopieren Der Code lautet wie folgt:
if (isNumber) {
var a = 1 ;
}


Wenn Sie daran interessiert sind, haben Sie vielleicht entdeckt: Es wird Mehrdeutigkeiten in JavaScript geben, die mit { beginnen.
Wie geht der JavaScript-Compiler mit dieser Mehrdeutigkeit um?

Um dieses Problem zu lösen, ist die Methode von ECMA sehr einfach und grob: Wenn eine Anweisung während der Grammatikanalyse mit „{“ beginnt, wird sie nur als Anweisungsblock interpretiert.

Das ist wirklich eine betrügerische Art, damit umzugehen!

Da es sich bei allen um Anweisungsblöcke handelt, warum weist {a:1} keine grammatikalischen Fehler auf?

Tatsächlich wird a hier vom Parser als Tag verstanden. Beschriftungen werden mit break- und continue-Anweisungen verwendet, um Richtungssprünge vorzunehmen.

Daher wird beim Schreiben wie folgt eine Ausnahme ausgelöst:

Code kopieren Der Code lautet wie folgt:
{
a: function () {}
}

Weil die Funktion () {} weder eine Funktionsdeklaration noch ein Funktionsausdruck ist.

An diesem Punkt sollte jeder eine grundlegende Vorstellung von der seltsamen Verarbeitung von {} haben. Schauen wir noch einmal auf die Sätze zurück, die am Anfang des Artikels erwähnt wurden:

Code kopieren Der Code lautet wie folgt:
{} []; 🎜>[ ] {}; // "[object Object]"
{} [] == [] {}; // false
({} [] == [] {}); wahr


Der erste Code kann wie folgt verstanden werden, da {} ein Anweisungsblock ist:

if (1) {}
[]


Der Rückgabewert ist also 0 .

Zweitens, da {} nicht am Anfang der Anweisung steht, handelt es sich um eine normale Objektdirektmenge. Das leere Array und das leere Objekt werden direkt hinzugefügt und „[object Object]“ zurückgegeben.

Ich habe den ersten und zweiten Punkt verstanden, der dritte Punkt bedarf keiner Erklärung mehr.

Da die vierte mit () beginnt, wird das erste {} als Objektliteral analysiert, sodass die beiden Formeln gleich sind und true zurückgeben.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage