もし間違いがあったら教えて下さい。
if-else文
if(i == 0){
print("if clause");
}else{
print("if clause");
}
switch-case文
var s = 'foo';switch(s){
//s === 0が偽なので次へ
case 0:
print('not here');
break;
//s === s.lengthが偽なので次へ
case s.length:
print('not here');
break;
//s === (0).toStringが偽なので次へ
case(0).toString();
print('not here');
break;
//s === 'f' + 'o' + 'o';が真なので以下を実行
case 'f' + 'o' + 'o';
print('here');
break;
//もしすべてのcase式で同値演算が偽になれば、以下を実行
default:
print('not here');
break;
}
[/javascript]
breakが無いと抜けないので注意。
while文
//紛らわしいインデント。2番目のprintは実際にはwhileループの外while(flag)
print("in loop");
print("not in loop");
// ブロック文にすると構造が自明
while(flag){
print("in loop");
print("in loop");
}
//文が一行でもブロック文にする
while(flag){
print("in loop");
}
[/javascript]
文中に他の文も書ける。
//入れ子のwhile
while(flag){
while(flag2){
print("in double loop");
}
}
//while文の中のif文
while(flag){
if(flag2){
print("in loop");
}
}
条件式が常に真の場合、無限ループになる。クライアントサイドJavaScriptではバグになる。 whileループを抜けるには、
- ループ内で、条件式が偽になる場合を保証する
- ループ内にbreak文を書く
- ループ内にreturn文を書く
- ループ内から例外を投げる
var i = 0;
while (i < 10){
print(i);
i++;
}
do-while文
do-whileはwhileで十分事足りるのであまり使わないらしい。do-whileを使うパターンは、事実上、次の2つ。
- 文を少なくとも1回実行しないと、条件式の評価に意味がでない場合
- 文を少なくとも1回実行することを保証したい場合
function printNumberFromRight(n){
do {
print(n % 10);
n = ~~(n /10); //n /= 10と書くと結果が少数になる。~~演算は少数を整数にする(トリッキーな)技法
} while (n > 0);
}
[/javascript]
for文
//ループ変数iの宣言を初期化式で行う例for (var i = 0; i < 10; i++){
print(i);
}
※ここで変数iを参照できることに注意(スコープ内)
print("i =" + i);
//i = 10;
//有名なイディオム
for(var i = 0; i < 10; i++){
print(i);
}
//ループ変数が1から始まり10回まわるループ。特別な理由が無い限り使わない。
for(var i = 1; i <= 10; i++){
print(i);
}
//複数のループ変数の例
for(var i = 0, J = 0; i < 10 && j < 10; i++, j++){
[/javascript]
for in文
//オブジェクトのプロパティ名の列挙var obj = { x:1, y:2, z:3 };
for (var k in obj){
print(k);
}
//実行結果
x
y
z
//オブジェクトのプロパティ値の列挙
var obj = { x:1, y:2, z:3 };
for (var k in obj){
print(obj[k]); //obj.kではundefinedになる
}
//実行結果
1
2
3
for each in文
ECMAScriptにはないJavaScript独自拡張。for inと異なり、変数にプロパティ名ではなくプロパティ値が代入される。
var obj = { x:1, y:2, z:3 };
for each (var v in obj){
print(v);
}
//実行結果
1
2
3
break文
while(true){〜
if(ループを抜ける条件){
break;
}
}
continue文
ループの中にcontinue文を書くと、それ以降のループ内の文をスキップしてループの条件式の評価に戻る。forループであれば更新式と条件式の評価に戻る。
//ループ変数が偶数のときだけ処理をするforループ
for( var i = 0; i < 10; i++ ){
if(i % 2 == 0){
処理
}
}
//continue書き換え版
for( var i = 0; i < 10; i++ ){
if(i % 2 != 0){
continue;
}
処理
}
ラベルを使ったジャンプ
入れ子になったループをbreakでぬけると、抜けるのは内部のループだけ。while(条件式){
print("outer loop");
while(条件式){
print("inner loop");
if(ループを抜ける条件){
break;
}
}
}
抜けるためにラベルを使える。
//ラベルを使い入れ子のループを同時に抜けるコード
outer_loop:
while(true){
print("outer loop");
while(true){
print("inner loop");
break outer_loop;
}
}
return文
return文は関数の処理を中断し、指定した式の評価値を関数の返り値にする。式が無い場合、関数の返り値はundefined値になる。
return 式
throw文
throw文で例外オブジェクト(例外値)を投げられる。throw 式
[/javascript]
try-catch-finally文
例外を補足する側はtry-catch-finally構文を使う。catch節とfinally節の両方の省略はできない。
片方のみの省略は可能。
//try文の実行例
try{
print('1');
null.x; //ここで強制的にTypeError例外を発生
print('not here'); //ここは実行されない
}catch (e){ //オブジェクトeはTypeErrorオブジェクトを参照
print('2');
}finally{
print('3');
}
//実行結果
1
2
3
with文
with文は一時的に名前(変数や関数名)の解決順序を変更するために使う。with文に与える式の型はオブジェクト型。他の型の式を与えるとオブジェクト型に型変換する。
with文の中での変数名の解決は、式に与えたオブジェクトのプロパティから探し始める。
ECMAScript第5版のstrictモードはwith文を禁止している。
//with文の例
var x = 1;
var obj = { x:7, y:2 };
with (obj){
print(x);
}
//実行結果
7
0 件のコメント:
コメントを投稿