+ | NN 2 IE 3 ECMA 1 |
加算演算子は数値と文字列の両方で使用できますが、オペランドのデータタイプによって結果は異なります。両方のオペランドが数値の場合には結果は 2 つの数値の合計に、両方のオペランドが文字列の場合には 2 つの文字列が加算の順序に連結されたものになります。片方のオペランドが数値でもう片方が文字列の場合には、数値データタイプが文字列に変換されてから 2 つの文字列が連結されます。文字列オペランドを数値に変換するには、parseInt() または parseFloat() 関数を使用します。 |
|
例 | |
var mySum = number1 + number2; var newString = "string1" + "string2"; |
|
return | NN 2 IE 3 ECMA 1 |
現在の関数の実行を中止します。return ステートメントは、制御構造内を含めて関数内のどの位置でも使用できます。オプションで呼び出しステートメントに特定の値を返すようにも指定できます。この戻り値には JavaScript の全データタイプを使用できます。値を返す return ステートメントがループやその他の制御構造の中にある場合、実行パスの各ブランチに return ステートメントを指定する必要があります。したがって、関数の最後の部分にあるメインの実行スコープまで到達した場合のために、デフォルトの return ステートメントを含める必要があります。 |
|
構文 | |
return [value]
|
|
例 | |
function validateNumber(form) { var oneChar; for (var i = 0; i < userEntry.length; i++) { oneChar = form.entry.value.charAt(i); if (oneChar < "0" || oneChar > "9") { return false; } } return true; } |
|
switch/case | NN 4 IE 4 ECMA 3 |
条件式の結果に従って多数の実行パスを指定する場合に簡略化するためのステートメントです。各 case ブロックの末尾にオプションの break ステートメントを置くと、switch ステートメントを簡単に実行でき、また間違って default ブロックが実行されるのを防ぐことができます。 |
|
構文 | |
switch (expression) { case label1: statements [break;] case label2: statements [break;] ... [default: statements] } |
|
例 | |
var productList = document.forms[0].prodList; var chosenItem = productList.options[productList.selectedIndex].value; switch(chosenItem) { case "Small Widget": document.forms[0].price.value = "44.95"; break; case "Medium Widget": document.forms[0].price.value = "54.95"; break; case "Large Widget": document.forms[0].price.value = "64.95"; break; default: document.forms[0].price.value = "Nothing Selected"; } |
|
throw | NN 6 IE 5 ECMA 3 |
例外を発生させ、例外と共に値を渡します。渡す値は単純な文字列でもかまいませんが、catch ステートメントがエラーに対して適切な処理を行うには、JavaScript の Error オブジェクトのインスタンスを十分な情報と共に渡す必要があります。throw ステートメントは、try-catch 制御ステートメントの try 部分に記述する必要があります。 |
|
構文 | |
throw value;
|
|
例 | |
function processNumber(inputField) { try { var inpVal = parseInt(inputField.value, 10); if (isNaN(inpVal)) { var msg = "Please enter a number only."; var err = new Error(msg); if (!err.message) { err.message = msg; } throw err; } // process number } catch (e) { alert(e.message); inputField.focus(); inputField.select(); } } |
|
try/catch | NN 6 IE 5 ECMA 3 |
この制御ステートメントを使用すると、処理を中断せずにエラー (例外) をスムーズに処理できます。この例外処理の制御ステートメントの両方の部分が必須です。try 部分でエラーが発生したら、実行は catch 部分に分岐します。ここで、スクリプトを使って、警告ダイアログボックスの表示、データの変更、または JavaScript のインタプリタからエラーメッセージが出力されることを防ぐその他の処理を行うことができます。throw ステートメントからスローされない、自然に発生する例外は、Error オブジェクトのインスタンスを catch 部分へのパラメータとして渡します。catch 部分の中にあるステートメントでは、エラーオブジェクトのプロパティを確認し、そこに分岐した例外の処理方法を決定できます。1 つの catch 部分で複数のタイプのエラーを処理できます。 |
|
try/catch 制御ステートメントは、この制御ステートメントをサポートするブラウザでのみ使用できます。古いブラウザでこの制御ステートメントが認識されないようにするには、関連するコードを、明示的に JavaScript 1.5 以降を必要とする、language = "JavaScript1.5" 属性を指定した <script> タグの中に配置します。 |
|
構文 | |
try { statement(s) that could cause error } catch (errorInfo) { process error(s) gracefully } |
|
例 | |
function insertOneNode(baseNode, newNode, position) { try { baseNode.insertBefore(newNode, baseNode.childNodes[position]); } catch (e) { // handle W3C DOM Exception types switch (e.name) { case "HIERARCHY_REQUEST_ERR" : // process bad tree hierarchy reference break; case "NOT_FOUND_ERR" : // process bad refNode reference break; default : // process all other exceptions } } return true; } |
|
while | NN 2 IE 3 ECMA 1 |
指定条件を満たしている間、ループ中のステートメントを繰り返し実行します。条件のテストはループの冒頭で行われるので、条件によってはループ内のステートメントが 1 度も実行されないことがあります。ループ内のステートメントは、条件式で使用する何らかの値を変更する必要があります。条件式の値が変わらないと、無限ループに陥ります。 |
|
構文 | |
while (condition) { statements } |
|
例 | |
var i = 0; while (!document.forms[0].radioGroup[i].checked) { i++; } alert("You selected item number " + (i+1) + "."); |
|
with | NN 2 IE 3 ECMA 1 |
with ステートメントは、ネストされている全ステートメントのスコープに特定のオブジェクトを追加します。これを使って特定のオブジェクト参照に依存するステートメントグループのコーディングを簡略化できます。with 制御ステートメントは一般に効率が良くありません。オブジェクト参照をローカル変数に代入し、その変数を関数で使用したほうがパフォーマンスが高くなります。 |
|
構文 | |
with (objectRef) { statements } |
|
例 | |
with (document.forms[0]) { name1 = firstName.value; name2 = lastName.value; mail = eMail.value; } |
|
//、/*...*/ | NN 2 IE 3 ECMA 1 |
スクリプトに実行しないテキストを含めるためのコメントステートメントです。ステートメント行の // の後に続くテキストはすべて、インタプリタにより無視されます。その次のスクリプト行は、// で始まっている場合を除き、ブラウザにより解釈されます。 |
|
複数行のコメントブロックを含めるには、ブロックを /* で開始します。コメントブロックの行数に制限はありません。コメントブロックを終了するには、*/ を入力します。すると、その後のステートメントからインタプリタによる解釈が再開されます。 |
|
例 | |
// convert temp from C to F /* many lines of comments */ |
|
//、/*...*/ | NN 2 IE 3 ECMA 1 |
スクリプトに実行しないテキストを含めるためのコメントステートメントです。ステートメント行の // の後に続くテキストはすべて、インタプリタにより無視されます。その次のスクリプト行は、// で始まっている場合を除き、ブラウザにより解釈されます。 |
|
複数行のコメントブロックを含めるには、ブロックを /* で開始します。コメントブロックの行数に制限はありません。コメントブロックを終了するには、*/ を入力します。すると、その後のステートメントからインタプリタによる解釈が再開されます。 |
|
例 | |
// convert temp from C to F /* many lines of comments */ |
|
@cc_on、@if、@end、@set | NN なし IE 4 (Win) ECMA なし |
Windows 版 IE には、条件付きコンパイルというスクリプト機能があります。条件付きコンパイルとは、@cc_on ステートメントを使用して有効にすると、この条件環境でテストできる条件下で JScript ステートメントを実行できるモードです。条件付きコンパイルのステートメントを JavaScript のコメントで囲むと、条件付きステートメントは Windows 版 IE 4 以降でのみ実行され、他のブラウザでは実行されません。 |
|
"条件" は、スクリプトエンジンのバージョン、OS、CPU のタイプなど、環境のプロパティを表す数々のグローバルプロパティで設定します。これらのプロパティは、すべて前に @ 記号が付きます。すべての情報は、さまざまなブラウザで navigator オブジェクトのプロパティから取得できるので、これはこの条件環境に限定される情報ではありません。 |
|
条件付きコンパイルを使用するには、次のステートメントをスクリプトに含めます。 |
|
/*@cc_on @*/ |
|
このモードを現在のページで一度有効にすると、同じページ内で無効にすることはできません。 |
|
@if および関連するステートメントを使用して、ブラウザで JScript バージョン 5.6 以降が実行されている場合 (IE 6 以降) に環境情報をウィンドウのステータスバーに表示する方法を以下に示します。 |
|
/*@cc_on @*/ /*@if (@_jscript_version >= 5.6 && @_x86) status = "Now running JScript version " + @_jscript_version + " with Intel inside."; @else @*/ status = "Have a nice day."; /*@end @*/ |
|
@set ステートメントを使用すると、条件付きコンパイルのセクション内で変数 (@ 接頭辞の付いた変数) に数値またはブール値を代入できます。 |
|
@set @isOK = @_win32 |
|
変数を初期化すると、変数とその識別子をページ全体のスクリプトステートメントで使用できます。Visual Basic の影響を受けた、条件付きコンパイルのステートメントでの @ ステートメントの構文では、ステートメントの末尾にセミコロンを付加できません。 |
|
条件付きコンパイルは、IE だけが展開の対象で、古い IE バージョンを、コンパイルエラーが発生する新しい言語機能 (try-catch 制御ステートメントなど) から分離する際に便利です。条件付きコンパイルのステートメントは、制御可能なバージョン状況でのみコンパイルされるからです。ただし、複数のブラウザを対象とした開発では、IE に限ったデバッグには便利ですが、実際のアプリケーション展開には役立たない可能性があります。 |
|
例 | |
上記の説明を参照してください。 |
|
@cc_on、@if、@end、@set | NN なし IE 4 (Win) ECMA なし |
Windows 版 IE には、条件付きコンパイルというスクリプト機能があります。条件付きコンパイルとは、@cc_on ステートメントを使用して有効にすると、この条件環境でテストできる条件下で JScript ステートメントを実行できるモードです。条件付きコンパイルのステートメントを JavaScript のコメントで囲むと、条件付きステートメントは Windows 版 IE 4 以降でのみ実行され、他のブラウザでは実行されません。 |
|
"条件" は、スクリプトエンジンのバージョン、OS、CPU のタイプなど、環境のプロパティを表す数々のグローバルプロパティで設定します。これらのプロパティは、すべて前に @ 記号が付きます。すべての情報は、さまざまなブラウザで navigator オブジェクトのプロパティから取得できるので、これはこの条件環境に限定される情報ではありません。 |
|
条件付きコンパイルを使用するには、次のステートメントをスクリプトに含めます。 |
|
/*@cc_on @*/ |
|
このモードを現在のページで一度有効にすると、同じページ内で無効にすることはできません。 |
|
@if および関連するステートメントを使用して、ブラウザで JScript バージョン 5.6 以降が実行されている場合 (IE 6 以降) に環境情報をウィンドウのステータスバーに表示する方法を以下に示します。 |
|
/*@cc_on @*/ /*@if (@_jscript_version >= 5.6 && @_x86) status = "Now running JScript version " + @_jscript_version + " with Intel inside."; @else @*/ status = "Have a nice day."; /*@end @*/ |
|
@set ステートメントを使用すると、条件付きコンパイルのセクション内で変数 (@ 接頭辞の付いた変数) に数値またはブール値を代入できます。 |
|
@set @isOK = @_win32 |
|
変数を初期化すると、変数とその識別子をページ全体のスクリプトステートメントで使用できます。Visual Basic の影響を受けた、条件付きコンパイルのステートメントでの @ ステートメントの構文では、ステートメントの末尾にセミコロンを付加できません。 |
|
条件付きコンパイルは、IE だけが展開の対象で、古い IE バージョンを、コンパイルエラーが発生する新しい言語機能 (try-catch 制御ステートメントなど) から分離する際に便利です。条件付きコンパイルのステートメントは、制御可能なバージョン状況でのみコンパイルされるからです。ただし、複数のブラウザを対象とした開発では、IE に限ったデバッグには便利ですが、実際のアプリケーション展開には役立たない可能性があります。 |
|
例 | |
上記の説明を参照してください。 |
|
@cc_on、@if、@end、@set | NN なし IE 4 (Win) ECMA なし |
Windows 版 IE には、条件付きコンパイルというスクリプト機能があります。条件付きコンパイルとは、@cc_on ステートメントを使用して有効にすると、この条件環境でテストできる条件下で JScript ステートメントを実行できるモードです。条件付きコンパイルのステートメントを JavaScript のコメントで囲むと、条件付きステートメントは Windows 版 IE 4 以降でのみ実行され、他のブラウザでは実行されません。 |
|
"条件" は、スクリプトエンジンのバージョン、OS、CPU のタイプなど、環境のプロパティを表す数々のグローバルプロパティで設定します。これらのプロパティは、すべて前に @ 記号が付きます。すべての情報は、さまざまなブラウザで navigator オブジェクトのプロパティから取得できるので、これはこの条件環境に限定される情報ではありません。 |
|
条件付きコンパイルを使用するには、次のステートメントをスクリプトに含めます。 |
|
/*@cc_on @*/ |
|
このモードを現在のページで一度有効にすると、同じページ内で無効にすることはできません。 |
|
@if および関連するステートメントを使用して、ブラウザで JScript バージョン 5.6 以降が実行されている場合 (IE 6 以降) に環境情報をウィンドウのステータスバーに表示する方法を以下に示します。 |
|
/*@cc_on @*/ /*@if (@_jscript_version >= 5.6 && @_x86) status = "Now running JScript version " + @_jscript_version + " with Intel inside."; @else @*/ status = "Have a nice day."; /*@end @*/ |
|
@set ステートメントを使用すると、条件付きコンパイルのセクション内で変数 (@ 接頭辞の付いた変数) に数値またはブール値を代入できます。 |
|
@set @isOK = @_win32 |
|
変数を初期化すると、変数とその識別子をページ全体のスクリプトステートメントで使用できます。Visual Basic の影響を受けた、条件付きコンパイルのステートメントでの @ ステートメントの構文では、ステートメントの末尾にセミコロンを付加できません。 |
|
条件付きコンパイルは、IE だけが展開の対象で、古い IE バージョンを、コンパイルエラーが発生する新しい言語機能 (try-catch 制御ステートメントなど) から分離する際に便利です。条件付きコンパイルのステートメントは、制御可能なバージョン状況でのみコンパイルされるからです。ただし、複数のブラウザを対象とした開発では、IE に限ったデバッグには便利ですが、実際のアプリケーション展開には役立たない可能性があります。 |
|
例 | |
上記の説明を参照してください。 |
|
@cc_on、@if、@end、@set | NN なし IE 4 (Win) ECMA なし |
Windows 版 IE には、条件付きコンパイルというスクリプト機能があります。条件付きコンパイルとは、@cc_on ステートメントを使用して有効にすると、この条件環境でテストできる条件下で JScript ステートメントを実行できるモードです。条件付きコンパイルのステートメントを JavaScript のコメントで囲むと、条件付きステートメントは Windows 版 IE 4 以降でのみ実行され、他のブラウザでは実行されません。 |
|
"条件" は、スクリプトエンジンのバージョン、OS、CPU のタイプなど、環境のプロパティを表す数々のグローバルプロパティで設定します。これらのプロパティは、すべて前に @ 記号が付きます。すべての情報は、さまざまなブラウザで navigator オブジェクトのプロパティから取得できるので、これはこの条件環境に限定される情報ではありません。 |
|
条件付きコンパイルを使用するには、次のステートメントをスクリプトに含めます。 |
|
/*@cc_on @*/ |
|
このモードを現在のページで一度有効にすると、同じページ内で無効にすることはできません。 |
|
@if および関連するステートメントを使用して、ブラウザで JScript バージョン 5.6 以降が実行されている場合 (IE 6 以降) に環境情報をウィンドウのステータスバーに表示する方法を以下に示します。 |
|
/*@cc_on @*/ /*@if (@_jscript_version >= 5.6 && @_x86) status = "Now running JScript version " + @_jscript_version + " with Intel inside."; @else @*/ status = "Have a nice day."; /*@end @*/ |
|
@set ステートメントを使用すると、条件付きコンパイルのセクション内で変数 (@ 接頭辞の付いた変数) に数値またはブール値を代入できます。 |
|
@set @isOK = @_win32 |
|
変数を初期化すると、変数とその識別子をページ全体のスクリプトステートメントで使用できます。Visual Basic の影響を受けた、条件付きコンパイルのステートメントでの @ ステートメントの構文では、ステートメントの末尾にセミコロンを付加できません。 |
|
条件付きコンパイルは、IE だけが展開の対象で、古い IE バージョンを、コンパイルエラーが発生する新しい言語機能 (try-catch 制御ステートメントなど) から分離する際に便利です。条件付きコンパイルのステートメントは、制御可能なバージョン状況でのみコンパイルされるからです。ただし、複数のブラウザを対象とした開発では、IE に限ったデバッグには便利ですが、実際のアプリケーション展開には役立たない可能性があります。 |
|
例 | |
上記の説明を参照してください。 |
|
/char | NN 2 IE 3 ECMA 1 | |||||||||||||||||||
JavaScript には、一般的な空白スペース文字 (制御コード) や、他の方法では文字列表現と競合する可能性のある記号を文字列に含めるメカニズムがあります。キーはバックスラッシュ文字 (\) で、この後に特殊な意味を持つ 1 文字を続けます。次の表に、認識されるエスケープ文字とその意味を示します。 |
||||||||||||||||||||
|
||||||||||||||||||||
これらの文字は、警告、確認、および入力用のダイアログボックスのテキストに便利です。たとえば、警告ボックスに複数の段落を表示するときに、各段落の間を 1 行ずつ空けるには、次のようにラインフィード文字を挿入します。 |
||||||||||||||||||||
alert("First paragraph.\n\nSecond paragraph.") |
||||||||||||||||||||
これらの文字は文字列だけに適用され、HTML コンテンツのフォーマットには影響しません。 |
||||||||||||||||||||
+= | NN 2 IE 3 ECMA 1 | |||||||||||||||||||||||||||||||||||
複合代入演算子です。このクラスの演算子は、通常の代入演算子 (=) を他の演算子の 1 つと複合し、左のオペランドに示された演算を右側のオペランドの値で行って代入を実行します。たとえば、a という名前の変数に文字列がある場合、+= 演算子で文字列を a に追加できます。 |
||||||||||||||||||||||||||||||||||||
a += " and some more."; |
||||||||||||||||||||||||||||||||||||
複合代入演算子がないと、演算は次のようになります。 |
||||||||||||||||||||||||||||||||||||
a = a + " and some more"; |
||||||||||||||||||||||||||||||||||||
次の表に、同じように機能する代入演算子を示します。 |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
例 | ||||||||||||||||||||||||||||||||||||
output += "<H1>Section 2</H1>"; total *= .95; |
||||||||||||||||||||||||||||||||||||
&& | NN 2 IE 3 ECMA 1 | |||||||||||||||
AND 演算子。この演算子は、2 つのブール式が等しいかどうか比較します。両方の式が true になる場合、&& 演算子の結果も true になります。片方または両方の式が false の場合、&& 演算子は false を返します。 |
||||||||||||||||
ブール式は、比較演算子のいずれかを使用した比較式またはその他の値から構成されます。次は、最も一般的なデータタイプ、値、そしてそれに相当するブール値を示したものです。 |
||||||||||||||||
|
||||||||||||||||
この情報に基づき、&& 演算子を使用して条件を組み合わせることができます。たとえば、誰かがフォームフィールドに数値を入力したかどうか、そしてその値が 100 より大きいかどうかを調べたい場合、条件は次のようになります。 |
||||||||||||||||
var userEntry = document.forms[0].entry.value ; if (userEntry && parseInt(userEntry) >= 100) { ... } |
||||||||||||||||
ユーザーが値を入力していない場合には、文字列は空の文字列です。複合条件で、最初のオペランドが false の場合、&& 演算子によって、式全体が false を返します (true を返すには、両方のオペランドが true でなければならないため)。複合条件のような式の評価は左から右に評価されるため、最初のオペランドの false 値は条件をバイパスして false を返します。つまり 2 番目のオペランドは評価されません。 |
||||||||||||||||
例 | ||||||||||||||||
if (a <= b && b >= c) { ... } |
||||||||||||||||
= | NN 2 IE 3 ECMA 1 |
代入演算子。この演算子は、右側のオペランドの評価結果を左の変数に代入します。演算の後、変数には元の値と同じデータタイプのデータが含まれます。代入演算は連鎖することもできます。式全体の処理は右から左に行われます。よって次のような場合、 |
|
a = b = c = 25; |
|
すべての変数は 25 に等しくなります。 |
|
例 | |
var myName = "Theodore Roosevelt"; var now = new Date(); |
|
& | NN 2 IE 3 ECMA 1 |
ビットごとの AND 演算子。この演算子は、2 つのオペランドでバイナリ演算を実行します (バイナリ値)。ビットの各列は、ブール値の AND 演算の対象となります。両方のオペランドにある列の値が 1 の場合には、その列位置の結果は 1 です。それ以外の組み合わせではすべてゼロです。演算子の結果値は、バイナリの結果に相当する 10 進数です。たとえば、3 と 6 のバイナリ値は順に 0011 と 0110 です。これらの 2 つの値で AND 演算が行われると、そのバイナリの結果は 0010 であり、それに相当する 10 進数は 2 です。 |
|
例 | |
var n = 3 & 6; |
|
<< | NN 2 IE 3 ECMA 1 |
ビット左シフト演算子。この演算子は、最初のオペランドのビットを 2 番目のオペランドで指定された列数だけ移動します。たとえば、3 のバイナリ (0011) のビットが左に 2 移動された場合、バイナリの結果は 1100 です。これに相当する 10 進数は 12 です。 |
|
例 | |
var shifted = 3 << 2; |
|
~ | NN 2 IE 3 ECMA 1 |
ビット NOT 演算子。この単一体の演算子は、数値の各列でバイナリ数値を反転させます。たとえば、バイナリの 6 は 0110 (左にゼロが多数付く)。各列の値での否定演算の後、バイナリでの結果は 1001 になります。左のゼロはすべて 1 に反転します。これに相当する 10 進数はマイナス値です (-5)。 |
|
例 | |
var n = ~6; |
|
| | NN 2 IE 3 ECMA 1 |
ビット OR 演算子。この演算子は、2 つのオペランド (そのバイナリ値) でバイナリ演算を実行します。ビットの各列は、ブール値の OR 演算の対象となります。両方のオペランドにある列の値が 0 の場合、その列位置の結果は 0 です。その他のすべての組み合わせは 1 になります。演算子の結果値はバイナリでの結果に相当する 10 進数値です。たとえば、3 と 6 のバイナリ値は順に 0011 と 0110 です。これらの 2 つの値で OR 演算が行われると、そのバイナリの結果は 0111 であり、それに相当する 10 進数は 7 です。 |
|
例 | |
var n = 3 | 6; |
|
>> | NN 2 IE 3 ECMA 1 |
ビット右シフト演算子。この演算子は、最初のオペランドのビットを 2 番目のオペランドで指定された列数だけ移動します。たとえば、6 のバイナリ値である 0110 のビットが 2 だけ右シフトした場合、バイナリでの結果は 0001 になります。番号の右端からもれた数字は切り捨てられます。 |
|
例 | |
var shifted = 6 >> 2; |
|
^ | NN 2 IE 3 ECMA 1 |
ビット排他 OR (XOR) 演算子。この演算子は、2 つのオペランド (そのバイナリ値) でバイナリ演算を実行します。ビットの各列は、ブール値の XOR 演算の対象となります。いずれかの (両方ではなく) オペランドにある列の値が 1 の場合、その列位置の結果は 1 です。その他のすべての組み合わせは 0 になります。演算子の結果値はバイナリでの結果に相当する 10 進数値です。たとえば、3 と 6 のバイナリ値は順に 0011 と 0110 です。これらの 2 つの値で XOR 演算が行われると、そのバイナリの結果は 0101 であり、それに相当する 10 進数は 5 です。 |
|
例 | |
var n = 3 ^ 6; |
|
>>> | NN 2 IE 3 ECMA 1 |
ビットゼロ埋め右シフト演算子。この演算子は、最初のオペランドのビットを 2 番目のオペランドで指定された列数だけ右に移動します。ビット右シフト演算子 (>>) では左から 1 で埋められますが、ゼロ埋め右シフト演算子 (>>>) では左の新しい桁はゼロです。数値の右側からこぼれた桁は切り捨てられます。Microsoft では、この演算子を符号なし右シフト演算子と呼んでいます。 |
|
例 | |
var shifted = 6 >>> 2; |
|
, | NN 2 IE 3 ECMA 1 |
コンマ演算子。この演算子は、スクリプトの同じ行で式を区切ることができます。演算子の後のスペースはあってもなくてもかまいません。用途はさまざまで、たとえば複数の変数を宣言する場合、構文は次のようになります。 |
|
var varName1, varName2, ... varNameN; |
|
複数のスクリプトステートメントを同じ行で結合することもできます。次はその例です。 |
|
alert("Howdy"), alert("Doody"); |
|
2 つの警告ダイアログボックスが順番に表示されます (2 番目のダイアログボックスは最初のダイアログボックスが閉じられると表示されます)。または、ループ内に 2 つ以上の変数を含めたい場合に for ループで使用することもできます。 |
|
for (var i = 0, var j = 2; i < 20; i++, j++) { ... } |
|
例 | |
var isCSS, isIEMac; |
|
?: | NN 2 IE 3 ECMA 1 |
条件演算子。この演算子は if/else 制御構造へのショートカット構文を提供します。この演算子の使用には、条件と 2 つのステートメントの合計 3 つのコンポーネントが必要です。条件が true と評価されると最初のステートメントが実行され、false の場合には 2 番目の条件が評価されます。これには次の構文を使用します。 |
|
condition ? statement1 : statement2 |
|
これらの演算子をネストして、1 つのステートメントに条件分岐を追加することもできます。次の構文では、conditionA が false の場合、conditionB が評価され、conditionB の結果に応じて式全体が statement2 または statement3 の値を返します。 |
|
conditionA ? statement1 : (conditionB ? statement2 : statement3) |
|
この演算子は外観上近道のように見えるだけで、実際には if...else 構造と同じ内部処理を実行します。 |
|
例 | |
var newColor = (temp > 100) ? "red" : "blue"; |
|
-- | NN 2 IE 3 ECMA 1 |
減少演算子。この単一体の演算子は、変数式の現在の値から 1 を減算します。この演算子を変数の前に置いた場合と後に置いた場合では効果が異なります。演算子を変数の前に置くと、変数が現在のステートメントで評価される前に減少します。次に例を示しました。 |
|
var a, b; a = 5; b = --a; |
|
a から 1 が減算されてから、b に代入されます。したがって、これらのステートメントの実行が完了すると、b と a はいずれも 4 になります。次の例はその反対の例です。 |
|
var a, b; a = 5; b = a--; |
|
減算は、a が b に代入された後に行われます。ステートメントが実行されると、b は 5 になり、a は 4 になります。 |
|
この動作は、for ループカウント変数が定義および使用される方法に影響を与えます。一般的に最高値から下に向かってカウントするループカウンタは、ループ内のステートメントが実行された後にカウンタを減少させます。このため、ほとんどのループカウンタでは演算子がカウンタ変数の後に置かれます。 |
|
for (var i = 10; i >=0; i--) {...} |
|
例 | |
--n n-- |
|
/ | NN 2 IE 3 ECMA 1 |
除法演算子。この演算子は、演算子の左にある数値を右の数値で割ります。両方側のオペランドが数値である必要があり、またこの演算子のある式は数値を返します。 |
|
例 | |
var myQuotient = number1 / number2; |
|
== | NN 2 IE 3 ECMA 1 | ||||||||||||||
等価演算子。この演算子は、2 つのオペランドを比較し、ブール値を返します。この演算子の動作は、script 要素に対して指定された JavaScript のバージョンによって異なります。language 属性が JavaScript または JavaScript1.1 に設定されている場合、次の表に示すように、いくつかのオペランドが自動的に変換されます。 |
|||||||||||||||
|
|||||||||||||||
Navigator 4 以降では、script 要素を明示的に language="JavaScript1.2" に設定した場合、値の比較方法が異なります。ブラウザは等価に関し文字通りの処理を行います。つまり自動データ変換は行われません。次に例を示します。 |
|||||||||||||||
123 == "123" |
|||||||||||||||
この式は自動データ変換によってほとんどのケースにおいて true です。Navigator 4 以降では、JavaScript 1.2 スクリプトに明示的に属するステートメントにおいてのみ false になります。新しい DOM と XHTML の標準ではスクリプト言語のバージョンを指定する場所がないので、このような特殊な状況を防ぐ必要があります。スクリプトでオペランドが絶対的に等しいかどうかをテストする必要がある場合は、新しい === の一致演算子を使用します。一般的な値のテストには、標準の等価演算子で問題はありません。 |
|||||||||||||||
バージョンに関わらず、オブジェクトの値 (new String() コンストラクタで明示的に生成された文字列など) を比較する場合には、toString() や valueOf() などのメソッドから得られた値を比較する必要があります。 |
|||||||||||||||
例 | |||||||||||||||
if (n == m) { ... } |
|||||||||||||||
> | NN 2 IE 3 ECMA 1 |
「より大きい」演算子。この演算子は、演算子の両側にあるオペランドの値を比較します。左のオペランドの数値が右のオペランドより大きい場合には、式は true を返します。文字列は値の比較のために Unicode 値に変換されます。 |
|
例 | |
if (a > b) { ... } |
|
>= | NN 2 IE 3 ECMA 1 |
以上演算子。この演算子は、演算子の両側にあるオペランドの値を比較します。左のオペランドの数値が右のオペランド以上の場合には、式は true を返します。文字列は数値の比較のために Unicode 値に変換されます。 |
|
例 | |
if (a >= b) { ... } |
|
=== | NN 4 IE 4 ECMA 2 |
一致演算子。この演算子は、2 つのオペランドを比較し、ブール値を返します。2 つのオペランドの値とデータタイプの両方が等しい場合に限り、この演算子は true を返します。データタイプの自動変換は行われません。他の等価比較については、等価演算子 (==) を参照してください。 |
|
例 | |
if (n === m) { ... } |
|
++ | NN 2 IE 3 ECMA 1 |
増加演算子。この単一体の演算子は、変数式の現在の値に 1 を加算します。この演算子を変数の前に置いた場合と後に置いた場合では効果が異なります。演算子を変数の前に置くと、変数が現在のステートメントで評価される前に増加します。次に例を示しました。 |
|
var a, b; a = 5; b = ++a; |
|
a に 1 が加算されてから、b に代入されます。したがって、これらのステートメントの実行が終了すると、b と a はいずれも 6 になります。次の例はその反対の例です。 |
|
var a, b; a = 5; b = a--; |
|
加算は、a が b に代入された後に行われます。これらのステートメントが実行されると、b は 5 になり、a は 6 になります。 |
|
この動作は、for ループカウント変数が定義および使用される方法に影響を与えます。一般的に、最低値から上にカウントするループカウンタでは、ループ内のステートメントが実行された後でカウンタが増加します。このため、ほとんどのループカウンタでは演算子がカウンタ変数の後に置かれます。 |
|
for (var i = 10; i >=0; i++) {...} |
|
例 | |
++n n++ |
|
!= | NN 2 IE 3 ECMA 1 |
不等価演算子。この演算子は、2 つのオペランドを比較し、ブール値を返します。この演算子の動作は、script 要素に対して指定された JavaScript のバージョンによって異なります。language 属性が JavaScript または JavaScript1.1 に設定されている場合、いくつかのオペランドが等価 (==) 演算子に基づいて自動的に変換されます。script 要素が language="JavaScript1.2" に設定された場合、Navigator 4 以降では状況が多少異なります。ブラウザは不等価に関し文字通りの処理を行います。つまり自動データ変換は行われません。次に例を示します。 |
|
123 != "123" |
|
この式は自動データ変換によってほとんどのケースにおいて false です。Navigator 4 以降では、JavaScript 1.2 スクリプトに明示的に属するステートメントにおいて true になります。新しい DOM と XHTML の標準ではスクリプト言語のバージョンを指定する場所がないので、このような特殊な状況を防ぐ必要があります。スクリプトでオペランドが絶対的に等しくないかどうかをテストする必要がある場合は、新しい !== の非一致演算子を使用します。一般的な値のテストには、標準の不等価演算子で問題はありません。 |
|
バージョンに関わらず、オブジェクトの値 (new String() コンストラクタで明示的に生成された文字列など) を比較する場合には、toString() や valueOf() などのメソッドから得られた値を比較する必要があります。 |
|
例 | |
if (n != m) { ... } |
|
< | NN 2 IE 3 ECMA 1 |
未満演算子。この演算子は、演算子の両側にあるオペランドの値を比較します。左のオペランドの数値が右のオペランドより小さい場合には、式の結果は true になります。文字列は値の比較のために Unicode 値に変換されます。 |
|
例 | |
if (a < b) { ... } |
|
<= | NN 2 IE 3 ECMA 1 |
以下演算子。この演算子は、演算子の両側にあるオペランドの値を比較します。左のオペランドの数値が右のオペランド以下の場合には、式の結果は true になります。文字列は数値の比較のために Unicode 値に変換されます。 |
|
例 | |
if (a <= b) { ... } |
|
% | NN 2 IE 3 ECMA 1 |
係数演算子。この演算子は、演算子の左にある数値を右の数値で割ります。除法後に余りがある場合には、式は余りを整数として返します。余りがない場合、戻り値はゼロです。両方側のオペランドが数値である必要があり、またこの演算子のある式は数値を返します。余り値に関心がない場合でも、この演算子はある値が特定値で割りきれるかどうかを調べる際に便利です。 |
|
例 | |
if ((dayCount % 7) > 0) { ... } |
|
* | NN 2 IE 3 ECMA 1 |
乗法演算子。この演算子は、演算子の左にある数値に右の数値を掛けます。両方側のオペランドが数値である必要があり、またこの演算子のある式は数値を返します。 |
|
例 | |
var myProduct = number1 * number2; |
|
- | NN 2 IE 3 ECMA 1 |
否定演算子。この単一体の演算子は、単一のオペランドの値を否定します。次に例を示します。 |
|
a = 5; b = -a; |
|
b の値は -5 になります。負の値に適用された否定演算子は正の値を返します。 |
|
例 | |
var myOpposite = -me; |
|
!== | NN 4 IE 4 ECMA なし |
非一致演算子。この演算子は、2 つのオペランドを比較し、ブール値を返します。2 つのオペランドの値とデータタイプの両方が等しい場合に限り、この演算子は false を返します。より一般的な比較については、不等価演算子 (!=) を参照してください。 |
|
例 | |
if (n !== m) { ... } |
|
! | NN 2 IE 3 ECMA 1 |
NOT 演算子。この単一体の演算子は、単一のブールオペランドの負の値を返します。NOT 演算子は、比較の結果やブールプロパティ設定など明示的なブール値と共に使用されます。 |
|
例 | |
if (a == !b) { ... } |
|
|| | NN 2 IE 3 ECMA 1 |
OR 演算子。この演算子は、2 つのブール式が等しいかどうか比較します。いずれかの式または両方の式が true になる場合、|| 演算子の結果も true になります。両方の式が false の場合、|| 演算子は false になります。ブール式は、比較演算子のいずれかを使用した比較式またはその他の値から構成されます。最も一般的なデータタイプ、値、それぞれに相当するブール値については、AND 演算子を参照してください。 |
|
|| 演算子を使用すると複合条件を作成できます。たとえば、2 つの条件のうち両方または片方が true であることを確認するには、次のような条件を作成します。 |
|
var userEntry1 = document.forms[0].entry1.value; var userEntry2 = document.forms[0].entry2.value; if (userEntry1 || userEntry2) { ... } |
|
複合条件では、|| 演算子は true を返す前に、両方または片方のオペランドが true を返すかどうかを調べます。ユーザーが最初のフィールドにテキストを入力した場合、いずれかのオペランドの true 値によって true 結果が返されるため、条件はバイパスされます。テキストが 2 番目のフィールドのみに入力された場合には、2 番目のオペランドが評価されます。2 番目のオペランドは true (空ではない文字列) を返すため、条件は true になります。両方のオペランドが false の場合に限り、複合条件が false になります。 |
|
例 | |
if (a <= b || b >= c) { ... } |
|
- | NN 2 IE 3 ECMA 1 |
減法演算子。この演算子は、演算子の左にある数値から右の数値を引きます。両方側のオペランドが数値である必要があり、またこの演算子のある式は数値を返します。 |
|
例 | |
var myDifference = number1 - number2; |
|
delete | NN 4 IE 4 ECMA 1 |
delete 演算子。この演算子は、オブジェクトからプロパティを削除するか (以前スクリプトでプロトタイプを静的オブジェクトに追加したオブジェクトのインスタンスから、プロトタイププロパティを削除するなど)、またはスクリプトで生成された配列から要素を削除します。配列のエントリを削除しても、配列の長さや、既存の項目の数値インデックスは変更されません。削除された項目の値が undefined になるだけです。delete 演算子は、メモリ管理ツールではありません。 |
|
例 | |
delete myString.author; |
|
in | NN 6 IE 5.5 (Win) ECMA なし |
in 演算子を使用すると、オブジェクトの特定のプロパティまたはメソッドが実装されているかどうかをスクリプトで簡単に確認できます。左のオペランドはプロパティまたはメソッドの名前を含む文字列です。メソッド名はかっこを省きます。右のオペランドは、オブジェクトへの参照です。確認に、"ドット" を伴う DOM 参照が必要な場合は、式のオブジェクト参照側に配置します。たとえば、"style.filter" in document.body は、"filter" in document.body.style とします。この ECMA 演算子を実装するブラウザが増えれば、オブジェクト検出の便利なツールになります。 |
|
例 | |
if ("createDocument" in document.implementation) { // go ahead and use document.implementation.createDocument() } |
|
instanceof | NN 6 IE 5 (Win) ECMA なし |
instanceof 演算子を使用すると、オブジェクト (左のオペランド) が既知のオブジェクトのインスタンスであるかどうか (または既知のオブジェクトから継承されているかどうか) をスクリプトで確認できます。この演算子は typeof 演算子に似ていますが、instanceof 演算子を使用した式は、大まかなオブジェクトタイプではなく、特定のオブジェクトタイプのテストに対するブール値を返します。オブジェクトとカスタムオブジェクトとの比較や、Netscape 6 では W3C DOM ツリーオブジェクトプロトタイプとの比較が可能です。配列に対する typeof 演算子は object を返しますが、この演算子ではオブジェクトが配列としてインスタンス化されているかどうかを確認できます。 |
|
myVar instanceof Array |
|
ただし、上記の式が true になる場合は、次の式も true になります。 |
|
myVar instanceof Object |
|
配列は、ルートの Object オブジェクトの子孫なので、そのルートオブジェクトのインスタンスでもあります。 |
|
Netscape 6 では、一方または両方のオペランドが DOM のプロトタイプオブジェクトへの参照であってもかまいません。したがって、Netscape 6 では、次の式は有効であり正常に機能します。 |
|
document.getElementById("widget") instanceof HTMLDivElement |
|
例 | |
if (theVal instanceof Array) { // go ahead and treat theVal as an array } |
|
new | NN 2 IE 3 ECMA 1 |
new 演算子は以下の ECMA 標準の静的オブジェクトのインスタンスを作成します。 |
|
|
|
この演算子のある式は、オブジェクトのインスタンスを求めます。つまり、この演算子を呼び出すと、同じ名前のコンストラクタ関数が JavaScript で検索されます。したがって、new 演算子は、カスタムのコンストラクタ関数で作成されたカスタムオブジェクトにも使用できます。また、Windows 版 IE では、ActiveX オブジェクトや VBArray オブジェクトなど、IE 独自のオブジェクトのインスタンスも作成できます。 |
|
構文の規則では、静的オブジェクトの命名、空のかっこの付いた静的オブジェクト、そしてかっこに入ったかっこの付いた静的オブジェクトが許容されています。 |
|
var myArray = new Array; var myArray = new Array(); var myArray = new Array("Larry", "Moe", "Curly"); |
|
最後の 2 つの例は、あらゆるスクリプト可能なブラウザバージョンで機能します。Date オブジェクトを除いては、ネイティブなオブジェクト作成中にパラメータの指定を省略すると、新しく作成されたインスタンスは静的オブジェクトのプロトタイプに指定されたプロパティのみを持ちます。 |
|
例 | |
var now = new Date(); |
|
this | NN 2 IE 3 ECMA 1 |
現在のオブジェクトを参照します。たとえばフォームコントロールオブジェクトのイベントハンドラーで、このオブジェクトを次のようにパラメータとして関数に渡すことができます。 |
|
<input type="text" name="ZIP" onchange="validate(this);"> |
|
カスタムのオブジェクトコンストラクタ内では、このキーワードはオブジェクト自体に参照します。これを使ってオブジェクトのプロパティに値を割り当てたり、プロパティを作成することができます。次に例を示します。 |
|
function CD(label, num, artist) { this.label = label; this.num = num; this.artist = artist; } |
|
関数内では、this キーワードは関数オブジェクトに参照します。ただし、カスタムオブジェクトコンストラクタのメソッドとして関数が割り当てられている場合、this は、関数が実行されるコンテキストのオブジェクトのインスタンスを参照します。 |
|
例 | |
<input type="text" name="phone" onchange="validate(this.value);"> |
|
typeof | NN 3 IE 3 ECMA 1 |
typeof 演算子は、値のデータタイプの 6 つの文字列説明のうちの 1 つを返します。データタイプを次に示します。 |
|
|
|
オブジェクトタイプには array も含まれますが、この演算子はこのオブジェクトのタイプや値の配列に関する情報を返しません (instanceof 演算子を参照)。 |
|
例 | |
if (typeof someVar == "string") { ... } |
|
void | NN 3 IE 4 ECMA 1 |
この単一体演算子は右に向かって式の結果を求め、式 (関数コールなど) が値を返しても undefined の値を返します。一般的にこの演算子は、関数を実行する javascript: 擬似 URL と共に使用します。関数が値を返しても、その値は呼び出し式によって無視されます。 |
|
例 | |
<a href="javascript: void getSound();" >...</a> |
|
break | NN 2 IE 3 ECMA 1 |
現在のループの実行を中止し、そのループの直後のスクリプトステートメントに制御を返します。ラベルパラメータを指定しない場合、break ステートメントのスコープはそのループ自体になります。ネストされたループから抜けるには、ネストされている各レイヤーにラベルを割り当て、break ステートメントのパラメータとして該当するラベルを指定します。label ステートメント (Navigator 4 および Internet Explorer 4 以降のみ) を参照してください。 |
|
構文 | |
break [label]
|
|
例 | |
label ステートメントを参照してください。 |
|
catch | NN 2 IE 3 ECMA 1 |
try を参照してください。 |
|
continue | NN 2 IE 3 ECMA 1 |
現在の繰り返し部分の処理を中断してループの先頭に戻り、次のパスを処理します。for ループで更新の式が指定されている場合にはそれを実行します。ネストされたループを使用する場合、ネストされている各レイヤーにラベルを割り当て、continue ステートメントのパラメータとして該当するラベルを指定します。label ステートメント (Navigator 4 および Internet Explorer 4 以降のみ) を参照してください。 |
|
構文 | |
continue [label]
|
|
例 | |
outerLoop: for (var i = 0; i <= maxValue1; i++) { for (var j = 0; j <= maxValue2; j++) { if (j*i == magic2) { continue outerLoop; } } } |
|
do/while | NN 4 IE 4 ECMA 3 |
指定条件が満たされている間、ループ中のステートメントを繰り返し実行します。条件のテストはループの最後に行われるので、ループ内のステートメントは最低でも 1 度は実行されます。ループ内のステートメントは、条件式で使用する何らかの値を変更する必要があります。条件式の値が変わらないと、無限ループに陥ります。 |
|
構文 | |
do { statements } while (condition) |
|
例 | |
var i = 1; do { window.status = "Loop number " + i++; } while (i <= 10) window.status = ""; |
|
for | NN 2 IE 3 ECMA 1 |
この制御ステートメントを使って、指定の回数だけステートメントを繰り返し実行します。 |
|
構文 | |
for ([initExpression]; [condition]; [updateExpression]) { statements } |
|
例 | |
var userEntry = document.forms[0].entry.value; var oneChar; for (var i = 0; i < userEntry.length; i++) { oneChar = userEntry.charAt(i); if (oneChar < "0" || oneChar > "9") { alert("The entry must be numerals only."); } } |
|
for/in | NN 2 IE 3 ECMA 1 |
通常の for ループのバリエーションを使って、オブジェクトのプロパティ名と値を検索することができます。この制御ステートメントの出力には、ブラウザの内部で列挙可能と設定されているプロパティだけが含まれます。Netscape 6 ではメソッドも含まれます。Opera 6 では、カスタムスクリプトで生成されたオブジェクトに対してのみこの制御ステートメントがサポートされます。 |
|
構文 | |
for (varName in objectRef) { statements } |
|
例 | |
function showProps() { objName = "image"; obj = document.images[0]; var msg = ""; for (var i in obj) { msg += objName + "." + i + "=" + obj[i] + "\n"; } alert(msg); } |
|
if | NN 2 IE 3 ECMA 1 |
条件分岐ステートメントで、別の実行パスを 1 つ指定できます。 |
|
構文 | |
if (condition) { statement(s) if true } |
|
例 | |
if (myDateObj.getMonth() == 1) { calcMonthLength(); } |
|
if/else | NN 2 IE 3 ECMA 1 |
条件分岐ステートメントですが、条件が true か false かによって 2 つの実行パスを指定できます。if/else ステートメントでは両方の実行パスに、別の if または if/else ステートメントをネストすることができます。 |
|
構文 | |
if (condition) { statement(s) if true } else { statement(s) if false } |
|
例 | |
var theMonth = myDateObj.getMonth(); if (theMonth == 1) { monLength = calcLeapMonthLength(); } else { monLength = calcMonthLength(theMonth); } |
|