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

WBOY
リリース: 2016-05-16 15:13:15
オリジナル
1399 人が閲覧しました

今日、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
  })

  //正确的写法

ログイン後にコピー

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート