ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの{}文ブロックの詳しい解説_基礎知識

JavaScriptの{}文ブロックの詳しい解説_基礎知識

WBOY
WBOYオリジナル
2016-05-16 15:13:151447ブラウズ

今日、json 文字列の解析を学び、eval() メソッドを使用しました。文字列を解析するときに括弧を追加する必要があるのはなぜですか?困惑した。 JavaScript の {} ステートメント ブロックは曖昧であり、括弧を追加しないとエラーが発生することがわかりました。この曖昧さを理解することは、JavaScript コードを理解するのに非常に役立ちます。

1. {} ステートメント ブロックの 2 つの意味

はステートメントブロック
を表します

a. {} を使用して JavaScript 内のコードを囲み、エディターでのコード管理を容易にすることができます。 JavaScript にはブロックレベルのスコープがないため、このアプローチは無害です。

{
//some code...
}


b. JavaScript では、条件ステートメント、ループ ステートメント、関数はすべて、コード

を統合するために {} ステートメント ブロックを必要とします。

オブジェクトリテラル

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

//このとき、[code] は式として使用され、変数に代入できます
//実際、オブジェクト リテラルはオブジェクト値を生成できる式です

2. オブジェクト リテラルが代入式として使用されない場合はどうなりますか?

例:

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

上記からわかるように、オブジェクト リテラルは式としてのみ代入できます。最初の書き方に問題はありませんが、JavaScript はこれをラベル ステートメントとして解析します。

分析:

  {name:'kuoao'}

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

3. しかし、問題は再び起こります...

{
name:'kuohao',
age:21
}

//これによりエラーが発生するのはなぜですか?これがオブジェクトリテラルの書き方ではないでしょうか?
JavaScript の {} には曖昧さがあるため、{} はオブジェクト リテラルであるだけでなく、コード ブロックともみなされます。

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

1 つのコード ブロック、2 つのラベル ステートメント、カンマがなければまったく問題ないため、キーはカンマです。2 つのステートメントはセミコロンで区切られている必要があるため、JavaScript はこれが構文であると判断します。エラー

4. 正しい書き方

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

  //正确的写法

() はステートメントをステートメント式と呼ばれる式に変換します。オブジェクトはリテラル式ではありませんか?変換するにはなぜ () が必要ですか?

括弧を追加すると、括弧内のコードが式の評価に変換されて返されるため、このあいまいさは解消されます。したがって、ステートメント ブロックはオブジェクト リテラルになり、オブジェクト リテラルは次のように存在する必要があると結論付けることもできます。式

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。