文 (statement)

文とは、JavaScriptに何らかの処理をさせる命令です。そしてその文の集合がプログラムとなります。

if

if( expression )
  statement
if...else | MDN

expressiontrueか、もしくは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 = Foo() ) // SyntaxError: syntax error
{
}

else

if( expression )
  statement1
else
  statement2
if...else | MDN

else if

switch

switch( expression )
{
  case label1:
    statement1
    [break;]

  case label2:
    statement2
    [break;]

  ...
  case labelN:
    statementN
    [break;]

  default:
    statement_def
    [break;]
}
switch | MDN

case

JavaScriptのcaseラベルはC言語などとは異なり、任意の式の指定が可能です。よって数値リテラル以外に、文字列リテラルなども使用できます。またこの式は実行時に評価されるため、変数や関数の指定もできます。なお式の評価は同値演算子 (===) で行われます。

while

while( expression )
  statement
while - JavaScript | MDN

if文と同様、条件文で変数を宣言するとsyntax errorとなります。

while( var a = Foo() ) // SyntaxError: syntax error
{
}

do while

do
  statement
while( expression );
do...while - JavaScript | MDN

for

for( [initialization]; [condition]; [final-expression] )
  statement
for - 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回実行される
}

statementconditionが評価された後、それがtrueの場合にのみ実行されるので、最初からconditionがfalseと評価されるならば、1度も実行されません。

for( var i = 0; false; i++ )
{
    // 1度も実行されない
}

for ... in

for( variable in object )
  statement
for...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 ... in

for each( variable in object )
  statement
for each...in - JavaScript | MDN

objectのすべてのプロパティを反復します。そのときstatementでは、各プロパティのvariableでアクセスできます。for ... inと比較すると、

  • for ... in … プロパティの名前
  • for each ... 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の理由に同じ)

ラベル (label)

ラベルは文を参照するための識別子であり、任意の文につけられます。

identifier: statement
label - 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;
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;
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

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 = Foo() );    // 不可 SyntaxError
while( var a = Foo() ); // 不可 SyntaxError

function

function funcname( [ arg1 [ , arg2 [ ..., argN ] ] ] )
{
  statement
}
function - JavaScript | MDN function - JavaScript | MDN

関数を宣言します。

return

return expression;
return - JavaScript | MDN

関数の戻り値を指定します。

ASIによってセミコロンが意図せず挿入されることがあるため、

return
    expression;

のように、returnの後で改行してはなりません。

throw

例外

try/catch/finally

例外

with

オブジェクトのスコープチェーンを一時的に変更します。

with( object )
  statement
with - JavaScript | MDN

コードの最適化が難しく実行速度が遅くなるため、使用は推奨されません

var obj = { a: 10 };

with( obj )
{
    alert( a ); // OK
}

alert( obj.a ); // OK
alert( a );     // NG: ReferenceError: a is not defined

空文

;

参考

参考書