文とは、JavaScriptに何らかの処理をさせる命令です。そしてその文の集合がプログラムとなります。
if( expression ) statementif...else | MDN
expressionがtrueか、もしくはtrueに変換可能であるときにstatementが実行されます。これは等値演算子や同値演算子の比較とは異なるので注意が必要です。その違いについて下表に示します。変数aが見出しの値をとるとき、statementが実行される場合を○としています。
変数aの値 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
論理値 | 数値 | 文字列 | null | 配列 | オブジェクト | NaN | undefined | ||||||||
true | false | 1 | 0 | -1 | '1' | '0' | '-1' | 'abc' | '' | [] | {} | ||||
if( a ) |
○ | × | ○ | × | ○ | ○ | ○ | ○ | ○ | × | × | ○ | ○ | × | × |
if( a == true ) |
○ | × | ○ | × | × | ○ | × | × | × | × | × | × | × | × | × |
if( a === true ) |
○ | × | × | × | × | × | × | × | × | × | × | × | × | × | × |
ちなみに条件文で変数を宣言すると、syntax errorとなります。
if( var a = Func() ) // SyntaxError: syntax error
{
}
if( expression ) statement1 else statement2if...else | MDN
switch( expression ) { case label1: statement1 [break;] case label2: statement2 [break;] ... case labelN: statementN [break;] default: statement_def [break;] }switch | MDN
JavaScriptのcaseラベルはC言語などとは異なり、任意の式の指定が可能です。よって数値リテラル以外に、文字列リテラルなども使用できます。またこの式は実行時に評価されるため、変数や関数の指定もできます。なお式の評価は同値演算子 (===) で行われます。
while( expression ) statementwhile - JavaScript | MDN
if文と同様、条件文で変数を宣言するとsyntax errorとなります。
while( var a = Func() ) // SyntaxError: syntax error
{
}
do statement while( expression );do...while - JavaScript | MDN
for( [initialization]; [condition]; [final-expression] ) statementfor - JavaScript | MDN
JavaScriptはブロックレベルのスコープを持たないため、initializationで変数を宣言しても、そのスコープはfor文内に制限されません。
for( var i = 0; i < 10; i++ )
{
}
alert( i ); // 10と表示される
ループする回数だけが問題ならば、次のようにすると指定回数だけstatementが実行されます。
for( var i = 0; i < 2; i++ )
{
document.write( i ); // 2回実行される
}
statementはconditionが評価された後、それがtrueの場合にのみ実行されるので、最初からconditionがfalseと評価されるならば、1度も実行されません。
for( var i = 0; false; i++ )
{
// 1度も実行されない
}
for( variable in object ) statementfor...in - JavaScript | MDN
variableはプロパティの名前となります。
var obj = { a: 1, b: 2, c: 3 }; for( var x in obj ) { document.write( x ); // このとき、obj[ x ]でプロパティの値を取得できる } // プロパティの名前の a, b, cを出力
for文を、配列に対して使用してはなりません。
DontEnum属性が設定されているプロパティは、処理対象となりません。ECMAScript DontEnum attribute | MDN
for each( variable in object ) statementfor each...in - JavaScript | MDN
objectのすべてのプロパティを反復します。そのときstatementでは、各プロパティの値にvariableでアクセスできます。for ... inと比較すると、
のように異なります。
for each ... inはJavaScript 1.6以降で有効のため、バージョンの明示が必要です。
var obj = { a: 1, b: 2, c: 3 };
for each( var x in obj )
{
document.write( x );
}
// プロパティの値の 1, 2, 3を出力
配列に対して使用してはなりません。(for ... inの理由に同じ)
ラベルは文を参照するための識別子であり、任意の文につけられます。
identifier: statementlabel - JavaScript | MDN
たとえば、
foo: for( var i = 0; i < 10; i++ ) {}
のように文の直前に記述します。この例では、このfor文の識別子がfooとなります。ラベルは記述する位置が重要であり、対象の文の直前でなければなりません。これを、
foo: var a = 0; for( var i = 0; i < 10; i++ ) {}
のようにすると、このラベルはfor文の識別子とはみなされません。
breakは、
を終了し、次の文へ制御を移します。
break;break - JavaScript | MDN
ラベルを設定することで、制御を移す先を指定できます。
break labelname;
たとえばそれは次のように記述でき、
foo: for( var i = 0; i < 5; i++ ) // A { for( var k = 0; k < 5; k++ ) // B { if( k == 3 ) break; // Bのループを抜ける if( i == 2 ) break foo; // Aのループを抜ける document.write( '' + k + i + ' ' ); } document.write( '<br />' ); }
これを実行すると、
00 10 20 01 11 21
のように出力されます。なおラベル付き文の種類は問われず、ループ文以外でも構いません。よって次のようにも記述できます。
foo:
{
for( var i = 0; i < 10; i++ )
{
if( 5 < i ) break foo;
}
}
alert( i ); // 6と表示
continue;
continue labelname;continue - JavaScript | MDN
ラベルを設定することで制御を移す先を自由に指定できるのは、breakと同じです。
foo: for( var i = 0; i < 5; i++ ) // A { for( var k = 0; k < 5; k++ ) // B { if( k == 3 ) continue; // Bのループを再開する if( i == 2 ) continue foo; // Aのループを再開する document.write( '' + k + i + ' ' ); } document.write( '<br />' ); }
これを実行すると、結果は次のようになります。
00 10 20 40 01 11 21 41 03 13 23 43 04 14 24 44
var name1 [ = value1 ] [ , ..., nameN [ = valueN ] ]var - JavaScript | MDN
変数を宣言します。
var文は、for文などの初期化部でも使えます。
for( var i = 0; i < 10; i++ ); // 可 for each( var x in obj ); // 可
しかしif文などの条件文では使えません。
if( var a = Func() ); // 不可 SyntaxError while( var a = Func() ); // 不可 SyntaxError
function funcname( [ arg1 [ , arg2 [ ..., argN ] ] ] ) { statement }function - JavaScript | MDN function - JavaScript | MDN
関数を宣言します。
return expression;return - JavaScript | MDN
関数の戻り値を指定します。
≫例外
≫例外
オブジェクトのスコープチェーンを一時的に変更します。
with( object ) statementwith - JavaScript | MDN
コードの最適化が難しく実行速度が遅くなるため、使用は推奨されません。
var obj = { a: 10 }; with( obj ) { alert( a ); // OK } alert( obj.a ); // OK alert( a ); // ERROR : ReferenceError: a is not defined
;