atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
0x0b
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
0x0b
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
0x0b
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 0x0b
  • js_about_04

0x0b

js_about_04

最終更新:2011年09月21日 14:34

Bot(ページ名リンク)

- view
管理者のみ編集可
Mozilla JavaScriptの続き
  • 文
    • ブロック文(Block Statement)
    • 条件文(Conditional Statements)
    • ループ文(Loop Statements)
    • for文
    • do...while 文
    • while 文
    • label 文
    • break 文
    • continue 文
    • オブジェクト操作文(Object Manipulation Statements)
    • コメント
    • 例外処理文(Exception Handling Statements)
    • throw 文
    • try...catch 文

文

ブロック文(Block Statement)

ブロック文は文をグループ化するのに用います。ブロックは波括弧のペアで区切ります。

{
   statement_1
   statement_2
   .
   .
   .
   statement_n
}
例
ブロック文は一般に制御フロー文(例:if、for、while)で用いられます。

while (x < 10) {
   x++;
}
ここでは { x++; } がブロック文です。

重要:JavaScript にはブロックスコープがありません。ブロックを用いて導入された変数のスコープは、そのブロックがある関数やスクリプトになります。変数をセットする影響はそのブロックを越えて持続されます。つまり、ブロック文はスコープを持ち込まないということです。独立したブロックも構文的には正しいのですが、C や Java のブロックで果たされるような機能を期待しているのであれば、そのような機能は果たされないため、JavaScript で独立したブロックを使う必要はありません。

var x = 1;
{
   var x = 2;
}
alert(x); // 2 を出力
ブロック内の var x 文はブロック前の var x 文と同じスコープ内であるため、この例では 2 が出力されます。C や Java では相当のコードは 1 を出力します。

条件文(Conditional Statements)

条件文は指定した条件が true ならば実行されるコマンドのセットです。JavaScript は if...else と switch の 2 つの条件文をサポートしています。

if...else 文
ある論理条件が true ならばある文を実行したいというときには if 文を使用してください。オプション的な else 節を使用すると、条件が false の場合にある文を実行することができます。if 文は次のように使用します。

if (condition)
   statement_1
[else
   statement_2]
condition には true か false に評価される式が入ります。condition が true に評価された場合は statement_1 が実行され、そうでない場合は statement_2 が実行されます。statement_1 と statement_2 はどんな文でもかまいません。if 文をさらに入れ子にすることもできます。

次のように else if を使用して文を重ねることで複数の条件を順々にテストさせることができます。

if (condition)
   statement_1
[else if (condition_2)
   statement_2]
...
[else if (condition_n_1)
   statement_n_1]
[else
   statement_n]
複数の文を実行させるには、ブロック文 ({ ... }) を使用してその文をグループ化してください。一般に常にブロック文を使用するのが優れた方法です。特に if 文を入れ子にしたコードでは有効です。

if (condition) {
   statements_1
} else {
   statements_2
}
条件式では単純な代入は使わないようにしてください。コードをちらっと見たときに、代入を等価条件と見間違えるおそれがあるためです。例えば次のようなコードは使用しないでください。

if (x = y) {
   /* 正しいことをする */
}
条件式で代入を使う必要がある場合に一般的な方法として代入式をさらに括弧でくくるというものがあります。

if ((x = y)) {
   /* 正しいことをする */
}
プリミティブな真偽値の true と false を Boolean オブジェクトの true や false という値と混同しないでください。undefined や、null、0、NaN、空文字列 ("") でないどんな値も、そして false という値を持つ Boolean オブジェクトを含むどんなオブジェクトも、条件文に通されると true に評価されます。

var b = new Boolean(false);
if (b) // この条件は true に評価される
例
次の例では、関数 checkData は Text オブジェクトに含まれている文字数が 3 の場合に true を返し、そうでない場合はアラートを表示して false を返します。

function checkData() {
   if (document.form1.threeChar.value.length == 3) {
      return true;
   } else {
      alert("Enter exactly three characters. " +
         document.form1.threeChar.value + " is not valid.");
      return false;
   }
}

switch 文
switch 文を使うと、プログラムは式を実行し、式の値を case ラベルにマッチさせます。マッチすると、プログラムは結びつけられた文を実行します。switch 文は次のように使用します。

switch (expression) {
   case label_1:
      statements_1
      [break;]
   case label_2:
      statements_2
      [break;]
   ...
   default:
      statements_def
      [break;]
}
プログラムはまず式の値にマッチしたラベルを持つ case 節を探します。そしてコントロールをその節に移し、結びつけられた文を実行します。マッチしたラベルがない場合、プログラムはオプション的な default 節を探し、あった場合はその節にコントロールを移し、結びつけられた文を実行します。default 節がなかった場合、プログラムは switch 文の後に続く文を実行し続けます。慣例により、default 節は最後の節にします。しかしそうしなければいけないわけではありません。

各 case 節に結びつけられたオプション的な break 文は、一度マッチした文を実行したら switch から抜け、switch に続く文を実行し続けることを確実にするものです。break を省略した場合、その switch 文における次の文を実行し続けます。

例
次の例では、fruittype が "Bananas" に評価された場合、"Bananas" という場合にマッチし、それに結びつけられた文が実行されます。break に出くわすとプログラムは switch から抜け、switch の後に続く文を実行します。break を省略すると "Cherries" という場合の文も実行されます。

switch (fruittype) {
   case "Oranges":
      document.write("Oranges are $0.59 a pound.<br>");
      break;
   case "Apples":
      document.write("Apples are $0.32 a pound.<br>");
      break;
   case "Bananas":
      document.write("Bananas are $0.48 a pound.<br>");
      break;
   case "Cherries":
      document.write("Cherries are $3.00 a pound.<br>");
      break;
   case "Mangoes":
   case "Papayas":
      document.write("Mangoes and papayas are $2.79 a pound.<br>");
      break;
   default:
      document.write("Sorry, we are out of " + fruittype + ".<br>");
}
document.write("Is there anything else you'd like?<br>");

ループ文(Loop Statements)

ループは指定した条件が満たされている限り繰り返し実行されるコマンドのセットです。JavaScript は、label はもちろん、for、do while、while といったループ文をサポートしています(label 自体はループ文ではありませんが、これらの文とともに頻繁に使用されます)。さらに、break および continue 文をループ文の中で使うことができます。

さらに for...in 文も文を繰り返し実行しますが、これはオブジェクトの操作に使用します。オブジェクト操作文 をご覧ください。

ループ文は以下のとおりです。
  • for 文
  • do...while 文
  • while 文
  • label 文
  • break 文
  • continue 文

for文

for ループは指定した条件が false に評価されるまで繰り返します。JavaScript の for ループは Java や C の for ループに似ています。for 文は次のように使用します。

for ([initialExpression]; [condition]; [incrementExpression])
   statement
for ループを実行すると以下のことが起こります。

1.初期化式 initialExpression があれば実行されます。この式は通常、1 つかそれ以上のループカウンタを初期化しますが、構文的にはある程度複雑な式も指定できます。また、この式は変数を宣言することもできます。
2.condition 式が評価されます。condition の値が true であればループ文が実行されます。condition が false の場合は for ループは終了します。condition 式が完全に省略されている場合、条件は true であると仮定されます。
3.statement が実行されます。複数の式を実行するにはブロック文 ({ ... }) を使用して文をグループ化してください。
4.更新式 incrementExpression があれば実行されます。そしてコントロールがステップ 2 に戻ります。
例
次の関数には、スクローリングリスト(複数選択できる Select オブジェクト)で選択されたオプションの数を数える for 文が含まれています。for 文では変数 i が宣言され、それが 0 に初期化されています。i が Select オブジェクトのオプションの個数より小さいかをチェックし、続く if 文を実行し、ループが 1 回りしたら i を 1 だけ増加させます。

<script type="text/javascript">//<![CDATA[

function howMany(selectObject) {
   var numberSelected = 0;
   for (var i = 0; i < selectObject.options.length; i++) {
      if (selectObject.options[i].selected)
         numberSelected++;
   }
   return numberSelected;
}

//]]></script>
<[[form]] name="selectForm">
   <p>
      <strong>Choose some music types, then click the button below:</strong>
      <br/>
      <select name="musicTypes" multiple="multiple">
         <option selected="selected">R&B</option>
         <option>Jazz</option>
         <option>Blues</option>
         <option>New Age</option>
         <option>Classical</option>
         <option>Opera</option>
      </select>
   </p>
   <p>
      <input type="button" value="How many are selected?"
         onclick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))"/>
   </p>
</form>

do...while 文

do...while 文は指定した条件が false に評価されるまで繰り返します。do...while 文は次のように使用します。

do
   statement
while (condition);
statement は条件がチェックされる前に一度実行されます。複数の文を実行するにはブロック文 ({ ... }) を使用して文をグループ化してください。condition が true の場合、その文が再び実行されます。毎回実行された後に条件がチェックされます。条件が false ときは実行が停止され、コントロールが do...while の後に続く文に渡されます。

例
次の例では do ループは最低 1 回は反復され、i が 5 より小さくなくなるまで反復されます。

do {
   i += 1;
   document.write(i);
} while (i < 5);

while 文

while 文は、指定した条件が true に評価される限り文を実行します。while 文は次のように使用します。

while (condition)
   statement
条件が false になるとループ内の statement の実行が停止し、ループの後に続く文にコントロールが渡されます。

ループの statement を実行する前に条件がテストされます。条件が true を返すと statement が実行され、再び条件がテストされます。条件が false を返すと、実行が停止され、while の後に続く文にコントロールが渡されます。

複数の文を実行するにはブロック文 ({ ... }) を用いて文をグループ化してください。

例 1
次の while ループでは n が 3 より小さい限り反復されます。

n = 0;
x = 0;
while (n < 3) {
   n++;
   x += n;
}
それぞれの反復で、ループは n をインクリメントし、その値を x に加えています。その結果、x と n は次の値をとります。

第 1 段階終了後:n = 1、x = 1
第 2 段階終了後:n = 2、x = 3
第 3 段階終了後:n = 3、x = 6
第 3 段階が完了すると条件 n < 3 が true ではなくなっているため、ループは終了します。

例 2
無限ループは避けてください。ループの条件が最終的には false になることを確認してください。そうしないとループが終了しなくなります。次の while ループ内の文は永久に実行されます。条件が決して false にならないためです。

while (true) {
   alert("Hello, world");
}

label 文

label を使うと、そのプログラムのどこからでも参照できる、識別子を持った文を作ることができます。例えば、ラベルを使用してあるループに名前を付けると、break 文や continue 文を使用してプログラムがループを脱出するべきかそのまま実行を継続するべきかを示すことができます。

label 文は次のように使用します。
label :
   statement
label の値は予約語でなければどんな JavaScript の識別子でも使用できます。ラベルを用いて名前を付ける statement はどんな文でも結構です。

例
この例では markLoop というラベルを用いて while ループに名前を付けています。

markLoop:
while (theMark == true)
   doSomething();
}

break 文

break 文

break 文は loop 文や switch 文、label 文から抜け出すために使用します。

break にラベルを使用しないと、最も内側にある while や do-while、for、switch から抜け、続く文にコントロールを移します。
break にラベルを使用すると、指定されたラベルの付いた文から抜けます。
break 文は次のように使用します。

break;
break label;
1番目の形式の構文は最も内側のループもしくは switch から抜けます。2番目の形式の構文は指定した label 文から抜けます。

例
次の例は、その値が theValue である要素のインデックスが見つかるまで、配列の要素について繰り返します。

for (i = 0; i < a.length; i++) {
   if (a[i] == theValue)
      break;
}

continue 文

continue 文は while 文、do-while 文、for 文、label 文をリスタートさせるために用います。

ラベルを用いずに continue を使用した場合、現在繰り返している最も内側にある while 文 do-while 文、for 文を終了し、次の反復の実行に移ります。break 文とは異なり、continue はループ全体の実行を終了しません。while ループでは条件比較部分に戻ります。for ループではインクリメントの式に移ります。
ラベルを用いて continue を使用した場合、label で指定されたループ文に移ります。
continue 文は次のように使用します。

continue
continue label
例 1
次の例では、i の値が 3 のときに実行される continue 文を用いた while ループを示します。こうすることで n は順に 1、3、7、12 という値をとります。

i = 0;
n = 0;
while (i < 5) {
   i++;
   if (i == 3)
      continue;
   n += i;
}
例 2
checkiandj というラベルの付いた文の中に checkj というラベルの付いた文があります。continue に出くわすと、プログラムは checkj の現在の反復を終了し、次の反復を始めます。continue に出くわすたびに、条件が false になるまで checkj を繰り返します。false が返されると checkiandj 文の残りを完了し、条件が false を返すまで checkiandj を繰り返します。false が返されると checkiandj に続く文が実行されます。

continue が checkiandj というラベルを持っているとプログラムは checkiandj 文の最初から続けます。

checkiandj :
   while (i < 4) {
      document.write(i + "<br/>");
      i += 1;
      checkj :
         while (j > 4) {
            document.write(j + "<br/>");
            j -= 1;
            if ((j % 2) == 0)
               continue checkj;
            document.write(j + " is odd.<br/>");
         }
      document.write("i = " + i + "<br/>");
      document.write("j = " + j + "<br/>");
   }

オブジェクト操作文(Object Manipulation Statements)

JavaScript はオブジェクトの操作に for...in、for each...in および with 文を使用します。

for...in 文
for...in 文は指定した変数をオブジェクトの全プロパティに対して反復します。それぞれのプロパティに対して JavaScript は指定した文を実行します。for...in 文は次のように使用します。

for (variable in object) {
   statements
}
例
次の関数は、あるオブジェクトとそのオブジェクトの名前を引数にとります。そしてそのオブジェクトの全プロパティに対して反復し、プロパティ名とその値のリストにした文字列を返します。

function dump_props(obj, obj_name) {
   var result = "";
   for (var i in obj) {
      result += obj_name + "." + i + " = " + obj[i] + "<br>";
   }
   result += "<hr>";
   return result;
}
make および model というプロパティを持つ car というオブジェクトでは次のような結果が得られます。

car.make = Ford
car.model = Mustang
配列
Array の要素に対して反復する方法としてこれを用いることは魅力的かもしれませんが、for...in 文はその配列の要素に加えてユーザ定義プロパティに対して繰り返すため、独自のプロパティやメソッドを追加するなどして Array オブジェクトに変更を加えると for...in 文は数値のインデックスに加えてユーザ定義プロパティの名前を返します。したがって、配列に対して反復したいときには数値のインデックスを用いた従来の for ループを使用したほうがいいでしょう。

for each...in 文
for each...in は JavaScript 1.6 で導入されるループ文です。これは for...in に似ていますが、オブジェクトのプロパティの名前ではなく、プロパティの値に対して反復します。

with 文
with 文はデフォルトのオブジェクトについて文のセットを実行します。JavaScript はその文のセットにおいて非修飾名を検索し、その名前がデフォルトのオブジェクトのプロパティであるかを決定します。非修飾名がプロパティにマッチすると、そのプロパティがその文で使われます。そうでない場合はローカル変数かグローバル変数が使われます。

with 文は次のように使用します。

with (object) {
   statements
}
例
次の with 文では Math オブジェクトがデフォルトのオブジェクトに指定されています。with 文内の文は PI プロパティや cos および sin メソッドを参照していますが、オブジェクトは指定していません。JavaScript はこれらの参照は Math オブジェクトへのものであると想定します。

var a, x, y;
var r = 10;
with (Math) {
   a = PI * r * r;
   x = r * cos(PI);
   y = r * sin(PI/2);
}
注意:with 文を使うことでプログラムをより簡潔にすることができますが、with の不適切な使用はプログラムを大幅にスローダウンさせることに繋がります。Core JavaScript 1.5 Reference:Statements:with を参照してください。

コメント

コメントはスクリプトの挙動を説明するメモに用います。コメントはインタプリタには無視されます。JavaScript は Java および C++ 形式のコメントをサポートしています。

1 行だけのコメントは 2 重のスラッシュ (//) から始まる。
複数行にまたがるコメントは /* から始まり */ で終わる。
例
以下に 2 つのコメントの例を示します。

// これは 1 行コメント。
/* これは複数行コメント。どんな長さでもかまわない。
書きたいことを何でもここに書ける。 */

例外処理文(Exception Handling Statements)

throw 文を使用すると例外を投げることができます。また、try...catch 文を使用すると例外を処理することができます。

try...catch 文を使用して Java の例外を処理することもできます。この情報については JavaScript での Java の例外の処理 および Java と JavaScript との通信 をご覧ください。

throw 文
try...catch 文
例外の種類

JavaScript ではほとんどどんなオブジェクトでも投げることができます。とは言っても、必ずしもすべての投げられたオブジェクトが同等に作られているわけではありません。数値や文字列をエラーとして投げる方法はよく用いられますが、特にこの用途のために作られている例外の種類のうちのどれかを使用したほうがより効率的であることがよくあります。

ECMAScript の例外
  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError
DOM の例外
  • DOMException
  • EventException
  • RangeException
  • ... (?)
  • nsIXPCException (XPConnect)

throw 文

throw 文は例外を投げるために使用します。例外を投げるときは、投げたい値からなる式を指定してください。

throw expression;
特定の型の式だけではなく、あらゆる式を投げることができます。下記のコードは様々な型の例外を投げています。

throw "Error2";
throw 42;
throw true;
throw {toString: function() { return "I'm an object!"; } };
注意:例外を投げる際にオブジェクトを指定することができます。すると、catch ブロックでそのオブジェクトのプロパティを参照できるようになります。次の例では UserException という種類の myUserException というオブジェクトを作ります。また、このオブジェクトを throw 文で使用します。
// UserException という種類のオブジェクトを作成
function UserException (message)
{
  this.message=message;
  this.name="UserException";
}

// 文字列として使用されるとき(例:エラーコンソール上)に
// 例外を整形する
UserException.prototype.toString = function ()
{
  return this.name + ': "' + this.message + '"';
}

// そのオブジェクトの種類のインスタンスを作成し、それを投げる
throw new UserException("Value too high");

try...catch 文

try...catch 文はテストしたい文のブロックを指定し、さらに投げられるであろう例外に対する 1 つ以上の対処方法を指定します。例外が投げられると try...catch 文がそれを受け取ります。

try...catch 文は 1 つの try ブロックと 0 個以上の catch ブロックからなります。前者は 1 つ以上の文からなります。後者は try ブロックで例外が投げられた場合にどうするかを指定する文からなります。すなわち、成功させたい try ブロックと、失敗した場合にコントロールを渡す catch ブロックからなります。try ブロック内(もしくは try ブロック内から呼び出された関数内)のいずれかの文が例外を投げた場合、コントロールはすぐに catch ブロックに移ります。try ブロックで例外が投げられなかった場合は catch ブロックは飛ばされます。finally ブロックは try および catch ブロックが実行された後に実行されます。ただし try...catch 文の後に続く文より先に実行されます。

次の例では try...catch 文を使用しています。この例では渡された値に基づいて配列から月の名前を取り出す関数を呼び出します。値に対応する月の数字 (1-12) がなかったら、InvalidMonthNo という値を持つ例外が投げられ、catch ブロックの中の文は monthName という変数に unknown という値をセットします。

function getMonthName (mo) {
    mo=mo-1; // 月の数字を配列のインデックスに合わせる (1=Jan, 12=Dec)
    var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",
          "Aug","Sep","Oct","Nov","Dec");
    if (months[mo] != null) {
       return months[mo]
    } else {
       throw "InvalidMonthNo"
    }
}

try {
// テストする文
    monthName=getMonthName(myMonth) // 関数は例外を投げることがある
}
catch (e) {
    monthName="unknown"
    logMyErrors(e) // 例外オブジェクトをエラー処理部分に渡す
}

catch ブロック
単一の catch ブロックを使用すると、try ブロックで生じうるすべての例外を扱うことができます。また、扱う例外の種類によって catch ブロックをそれぞれに分けることもできます。

単一の catch ブロック
try ブロックで投げられるいかなる例外にも対応したエラー処理コードを実行するには、try...catch 文で catch を 1 つ使用してください。

単一の catch ブロックは次のように使用します。

catch (catchID) {
  statements
}
catch ブロックは、throw 文で指定された値を持つ識別子(上記の構文における catchID)を指定します。この識別子を使用することで投げられた例外についての情報を得ることができます。JavaScript は catch ブロックに入るときにこの識別子を作成します。識別子は catch ブロックにいる間だけ持続します。つまり、catch ブロックの実行が終了するとその識別子はもう使えなくなります。

例えば、次のコードは例外を投げます。例外が生じるとコントロールが catch ブロックに移ります。

try {
   throw "myException" // 例外を生成
}
catch (e) {
// どんな例外も扱う文
   logMyErrors(e) // 例外オブジェクトをエラー処理部分に渡す
}

複数の catch ブロック
1 つの try 文に対して、複数の条件についての catch ブロックを使うことができます。そして、そのそれぞれがそれぞれの種類の例外を担当します。この場合、そのブロックで指定されている例外が投げられたときだけ、適切な条件の catch ブロックに入ることになります。すべての未指定の例外のために、すべての例外に対応した catch ブロックをその文の最後の catch ブロックとしてオプション的に設けることもできます。

例えば、次の関数は 3 つの別の関数(どこかで定義済み)を呼び出します。この関数はその引数が妥当であるかを確かめます。妥当性確認関数が確認対象の構成要素が妥当でないと決定した場合、その関数は 0 を返し、該当する例外を呼び出し元に投げさせます。

function getCustInfo(name, id, email)
{
   var n, i, e;

   if (!validate_name(name))
       throw "InvalidNameException"
   else
       n = name;
       if (!validate_id(id))
          throw "InvalidIdException"
       else
          i = id;
       if (!validate_email(email))
          throw "InvalidEmailException"
       else
          e = email;
       cust = (n + " " + i + " " + e);
       return (cust);
}
おのおのの条件の catch ブロックは適当な例外処理部分にコントロールを渡します。

try {
// 関数は 3 つの例外を投げうる
   getCustInfo("Lee", 1234, "lee@netscape.com")
}

catch (e if e == "InvalidNameException") {
// 不正な名前に対しての処理部分を呼び出す
   bad_name_handler(e)
}

catch (e if e == "InvalidIdException") {
// 不正な ID に対しての処理部分を呼び出す
   bad_id_handler(e)
}

catch (e if e == "InvalidEmailException") {
// 不正なメールアドレスに対しての処理部分を呼び出す
   bad_email_handler(e)
}

catch (e){
// 何が起きるかはわからないが、そのログをとる
   logError(e)
}

finally ブロック
finally ブロックは、try および catch ブロックの実行が終わった後に実行される文からなります。ただし try...catch 文の後に続く文より前に実行されます。finally ブロックは例外が投げられても投げられなくても実行されます。例外が投げられた場合、finally ブロック内の文はたとえ例外処理をする catch ブロックがなくても実行されます。

finally ブロックを使用することで、例外発生時に適切にスクリプトを停止させることができます。例えば、スクリプトで使用していたリソースを解放する必要があるかもしれません。次の例ではファイルを開き、そのファイルを使用する文を実行します(サーバサイド JavaScript ではファイルにアクセスできます)。ファイルを開いている間に例外が投げられると、スクリプトが停止する前に finally ブロックがそのファイルを閉じます。

openMyFile();
try {
   writeMyFile(theData); // エラーを投げる可能性がある
}catch(e){
   handleError(e); // エラーを受け取り、それを処理する
}finally {
   closeMyFile(); // 常にリソースを閉じる
}
try...catch 文のネスト

1 つ以上の try...catch 文を入れ子にすることができます。内側の  try...catch 文に catch ブロックがない場合、囲んでいる try...catch 文の catch ブロックがマッチしているか確認されます。
「js_about_04」をウィキ内検索
LINE
シェア
Tweet
0x0b
記事メニュー
  • トップページ

  • JavaScript(ECMAscript)
  • CSS
  • SGML/HTML/XML

テスト用
  • 砂場
見本
  • 使用頻度の高い構文


メモ
_travian
_


ここを編集




延べ - 回
今日 - 回
昨日 - 回



記事メニュー2
2025-09-08 08:42:36 (Mon)

更新履歴

取得中です。



@wikiヘルプメニュー
  • @wiki助け合いコミュニティ
  • wiki(ウィキ)って何?
  • 初心者ガイド
  • ご利用ガイド
  • 良くある質問
  • プラグイン一覧
  • 編集モードの違いについて
  • 不具合や障害を見つけたら
  • 管理・設定マニュアル




ここを編集
最近更新されたページ
  • 4126日前

    トップページ
  • 5093日前

    js_ref
  • 5100日前

    js_about_08
  • 5100日前

    js_about_07
  • 5100日前

    js_about_06
  • 5100日前

    js_about_05
  • 5100日前

    js_about_04
  • 5101日前

    js_about_03
  • 5104日前

    js_about_02
  • 5104日前

    js_about_01
もっと見る
最近更新されたページ
  • 4126日前

    トップページ
  • 5093日前

    js_ref
  • 5100日前

    js_about_08
  • 5100日前

    js_about_07
  • 5100日前

    js_about_06
  • 5100日前

    js_about_05
  • 5100日前

    js_about_04
  • 5101日前

    js_about_03
  • 5104日前

    js_about_02
  • 5104日前

    js_about_01
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. モンスター烈伝オレカバトル2@wiki
  2. Dance Dance Revolution SP総合wiki
  3. テイルズ オブ ヴェスペリア 2ch まとめ @Wiki
  4. モンスターファーム2@まとめwiki
  5. テイルズ オブ グレイセス f まとめWiki
  6. Dragon Marked For Death攻略Wiki
  7. ポケモン 作品なりきりネタWiki
  8. アサルトリリィ wiki
  9. Abiotic Factor 日本語攻略Wiki
  10. パタポン2 ドンチャカ♪@うぃき
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 発車メロディーwiki
  8. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. まどドラ攻略wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. シュガードール情報まとめウィキ
  4. SurrounDead 攻略 (非公式wiki)
  5. ちいぽけ攻略
  6. Dark War Survival攻略
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. カツドンチャンネル @ Wiki
  9. AviUtl2のWiki
  10. 魔法少女ノ魔女裁判 攻略・考察Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  3. 天羽 まろん - ストグラ まとめ @ウィキ
  4. 天羽 みかげ - ストグラ まとめ @ウィキ
  5. ミッション攻略 - 地球防衛軍6 @ ウィキ
  6. 稼ぎ - 地球防衛軍6 @ ウィキ
  7. ヤソップ(ONE PIECE) - アニヲタWiki(仮)
  8. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  9. 雨宮(amemiya0123) - ダイナマイト野球3D
  10. 千鳥の鬼レンチャン 挑戦者一覧 - 千鳥の鬼レンチャン サビだけカラオケデータベース
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.