Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung des {}-Anweisungsblocks in JavaScript_Grundkenntnisse

Detaillierte Erläuterung des {}-Anweisungsblocks in JavaScript_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 15:13:151447Durchsuche

Heute habe ich gelernt, einen JSON-String zu analysieren und die Methode eval() zu verwenden. Warum muss ich beim Parsen eines Strings Klammern hinzufügen? Verwirrt. Es stellt sich heraus, dass der {}-Anweisungsblock in JavaScript mehrdeutig ist und ein Fehler auftritt, wenn keine Klammern hinzugefügt werden. Das Verständnis dieser Mehrdeutigkeit ist für unser Verständnis des JavaScript-Codes von großer Hilfe.

1. Zwei Bedeutungen des {}-Anweisungsblocks

steht für den Anweisungsblock

a. Sie können {} verwenden, um Code in Javascript einzuschließen, um die Codeverwaltung im Editor zu erleichtern. Da JavaScript keinen Gültigkeitsbereich auf Blockebene hat, ist dieser Ansatz harmlos.

{
//some code...
}


b. In JavaScript erfordern alle bedingten Anweisungen, Schleifenanweisungen und Funktionen {}-Anweisungsblöcke, um Code zu integrieren

Objektliteral

var box = {
  name:'kuoaho',
  age:21 
}

//Zu diesem Zeitpunkt wird [Code] als Ausdruck verwendet und kann einer Variablen
zugewiesen werden //Tatsächlich sind Objektliterale Ausdrücke, die Objektwerte generieren können

2. Was passiert, wenn das Objektliteral nicht als Zuweisungsausdruck verwendet wird?

Beispiel:

  {name:'kuoao'}    //没有报错,但是也没有创建对象
  {name:'kuohao',age}  //报错

Wie aus dem Obigen hervorgeht, können Objektliterale nur als Ausdrücke zugewiesen werden. An der ersten Schreibweise ist nichts auszusetzen, aber JavaScript analysiert sie als Label-Anweisung.

Analyse:

  {name:'kuoao'}

    //{}一个语句块
   // name:'kuohao',一个label语句,用于标记for循环

3. Aber das Problem kommt wieder...

{
name:'kuohao',
age:21
}

//Warum verursacht dies einen Fehler? Werden Objektliterale nicht so geschrieben?
Aufgrund der Mehrdeutigkeit von {} in JavaScript wird {} nicht nur als Objektliteral, sondern auch als Codeblock betrachtet.

analysis:
  {
  name:'kuohao',
  age:21
  }

Ein Codeblock, zwei Label-Anweisungen. Wenn kein Komma vorhanden ist, gibt es überhaupt kein Problem. Der Schlüssel ist also das Komma. Die beiden Anweisungen sollten durch ein Semikolon getrennt werden, damit JavaScript erkennt, dass es sich um eine Syntax handelt Fehler

4. Richtiges Schreiben

({
  name:'kuohao',
  age:21
  })

  //正确的写法

() wandelt eine Anweisung in einen Ausdruck um, der als Anweisungsausdruck bezeichnet wird. Ist ein Objektliteral nicht ein Ausdruck? Warum muss () konvertiert werden?

Nach dem Hinzufügen von Klammern kann diese Mehrdeutigkeit beseitigt werden, da der Code in den Klammern in eine Ausdrucksauswertung umgewandelt und zurückgegeben wird, sodass der Anweisungsblock zu einem Objektliteral wird und daraus auch geschlossen werden kann, dass Objektliterale als existieren müssen Ausdrücke

Stellungnahme:
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