JavaScript 第5版 - 6章 文(1)

JavaScript 第5版の「6章 文」、「6.1 式文」~「6.15 return文」(81~98ページ)を読み進めていきます。

6.5 switch文

  • ECMAScript標準ではcaseラベルに式が記述できる。
  • caseラベルの値は、同値演算子(===)を使って比較される。つまり、型変換は行われない。

他の言語とは大きく異なるのが、caseラベルに定数以外の式が書ける点です。

case 60 * 60 * 24:
case Math.PI:
case n + 1:
case a[0]:

6.9 for/in文

for (variable in object)
    statement
  • variableは、評価すると代入式の左側としてふさわしい値になる式(変数、var文、配列要素、オブジェクトプロパティ)でなければならない。
  • objectは、オブジェクト名、または評価するとオブジェクトになる式でなければならない。
  • ループ本体が実行される前に、objectに属するプロパティの内、1つのプロパティ名がvariableに代入される。
  • objectに属するプロパティのvariableへの代入順序は実装によって異なる。
  • ループ本体でobjectに属するプロパティを削除したり、プロパティを新たに定義した場合の振る舞いは実装によって異なる。
  • 必ずしも全てのオブジェクトの全てのオブジェクトプロパティが調べられるとは限らない。組み込みメソッドや組み込みプロパティの多くは調べられない。

以上のことから、for/in文を使って、オブジェクトのプロパティ名を配列にコピーすることもできます。

var o = { x: 1, y: 2, z: 3 };
var a = new Array();
var i = 0;

for (a[i ++] in o) /* ループ本体は空。セミコロンが必要なことに注意→ */ ;

6.14 function文

  • JavaScriptでは動的な振る舞いをするものを文と呼ぶが、function文は静的な構造を定義するものであり、厳密には文とは異なる。
  • 関数定義は、JavaScriptパーサによって次のように処理される。
    1. 関数を解析し、関数内の文を実行せずに格納する(関数オブジェクトの生成)。
    2. 関数名と同じ名前で(関数定義が入れ子になっているときはCallオブジェクト、それ以外はグローバルオブジェクトの)プロパティが生成される。
    3. 生成されたプロパティに関数オブジェクトが格納される。

function文による関数定義は静的な構造を定義するものである点、実行されるものではなく解析されるだけという点が重要です。変数定義とはタイミングが異なることから次のような現象が起こります。

alert(f(4));  // 16が表示される。f()は定義前でも呼び出せる。
var f = 0;

function f(x) {
    return x * x;
}

alert(f);  // 0が表示される。

6.15 return文

  • 式のないreturn文を実行した場合や、return文がない関数の返り値は未定義値(undefined)となる。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/62/trackback/
この記事のURI
http://dxd8.com/archives/62/