私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

JavaScript 第5版 6章 文

コンピュータに対する命令を文という。副作用を伴わない式は、基本的には文ではない。たとえば下記。

1 * 2;

代入演算子を伴うものは、左辺の変数の値を変更する副作用を伴うので、文といえる。

var x = 1 * 2;

6.1 式文

代入演算子を伴う式は、文であり、式文という。インクリメント演算子を伴うものも同様。

var x = 1 * 2;
x++;
y--;

6.2 複合文

{}で囲んだものを文ブロックという。文ブロックの途中で処理が終了するのは、break文、continue文、return文、throw文があった時や、エラーが発生した時など。

6.3 if文

Javaと同じ。

6.4 else if文

Javaと同じ。

6.5 switch文

Javaと同じ。case句は、等値演算子(===)で比較する。その時、自動変換は行われない。

6.6 while文

Javaと同じ。

6.7 do/while文

Javaと同じ。

6.8 for文

Javaと同じ。

6.9 for/in文

オブジェクトのプロパティを調べる時に便利。ただし、組み込みオブジェクトのプロパティはすべて調べられない時がある。

for(var prop in obj){
  alert('プロパティ名:' + prop + ' 値:' + obj[prop]);
}

objオブジェクトにxというプロパティがあった場合、次のようにしてxプロパティにアクセスできる。

obj.x;
obj['x']

6.10 ラベル文

Javaと同じ。

6.11 break文

ラベルを伴わないbreak文は、for, for/in, while, do/while, switch文でしか使えない。それに対して、ラベルを伴うbreak文は、それ以外の文ブロックで使用可能。たとえば、下記のようにラベルを伴うbreak文を書くことができる。

test:
{
  alert(1);   // 実行される。
  break test; // testラベルの付いた文ブロックを抜ける。
  alert(2);   // 実行されない。
}
alert(3);     // 実行される。

6.12 continue文

break文と異なり、ラベルの使用有無に関係なく、continue文は、for, for/in, while, do/while, switch文でしか使えない。

6.13 var文

1つ以上の変数を宣言する時に使用する。

var x = 1, y = 2, z;  // 変数x, yは初期化も行い、zは宣言のみ。

6.14 function文

    • 関数を宣言する時に使用する。
    • {}は必須。
    • 宣言時に本体は実行されない。
    • ()演算子で呼ばれた時に本体はコンパイルされる。
    • 関数外で定義した場合はグローバルオブジェクトのプロパティとして定義される。
    • 関数内で定義した場合はCallオブジェクトのプロパティとして定義される。
    • 関数定義は、最初に定義される。
f(3);  // 「3」が表示される。
       // つまり、この行が実行される前に関数fは既に定義されている。
       // しかし、関数定義時に本体は実行されないし、コンパイルもされない。
       // コンパイルされるのは実行時。
function f(x){
  alert(x);
}

6.15 return文

関数の戻り値を指定する。戻り値がない場合は未定義値になる。

function f(){
  return;
}
var x = f(); 
alert(x);  // undefined

6.16 throw文

エラーの通知。
通常、Errorオブジェクトか、そのサブクラスのオブジェクトをスローするが、実は何でもいい。

try{
  throw new Date();
}
catch(e){
  alert(e);  // 日付が表示される。
}

6.17 try/catch/finally文

Javaと同じ。

    • {}は必須
    • catch/finallyのどちらか必須

6.18 with文

スコープチェーンを一時的に変更する時に使用する。with(obj)と書いたとき、objがCallオブジェクトになるイメージ。

6.19 空文

;

6.20 JavaScript文のまとめ

まとめ。