
javascriptの例外処理をwikibooks*1で勉強しているときに、
catch(e){}というものを見つけました。
このeは普通の変数、または普通のオブジェクトなのでしょうか?
まだ初学者なので、想像で語ることになりますが、
例えば、ウェブページにユーザー登録のフォームを作成するとき、ユーザー名のルールとして、
「頭文字は数字じゃダメ」と、javascriptで設定し、
ルールに反する値(=例外)、ここでは11と仮定し、
それが入力されたときに、その例外の値をeとして、catch(eという変数の値を、11にする)し、
それを後ほど、alert(e + " はダメです。ルールを読んでください")のようにするのでしょうか?
*1
wikibooks
http://ja.wikibooks.org/wiki/JavaScript_try-catc …
No.2ベストアンサー
- 回答日時:
JavaScript において例外とは、通常ルートでは考慮されない状況が発生したことを、任意の値を「投げる」ことによって、制御構造を無視してお知らせする機能です。
一般的な用途としては、
・プログラムの文法が間違っている (コンパイル型なら発生しない状況)
・関数の引数が間違っている (静的型付けなら発生しない状況)
・機械が故障した (普通は考慮しない状況)
・通信が強制的に遮断された (業務的に意識したくない状況)
等の状況が発生した際に、
その状況を説明した Error オブジェクトを投げることにより通常ルートを中断し、
専用の例外ルートにて例外処理を行います。
ただ Error オブジェクトでなければいけない決まりはないので、
try {
if(isNG()) throw "NG"; // 例外を説明する string を投げる
alert('正常');
} catch (e) {
alert(e+'でした'); // 例外の説明を元に、例外処理として 'NGでした' を表示
}
の様に実装するこのも可能ですが、
投げる箇所と例外処理の箇所は、別な人が実装することが多いので、
混乱しないように Error オブジェクトを投げるのが良いでしょう。
ところで、ユーザー名の検証などは一般的に通常ルート(業務処理)とされます。
例外処理とはあくまでも例外的な状況を処理する為に使うべきなので、
通常ルートを例外処理で実装するのは、あまり好ましくない行為です。
ですが、通常ルートをすっ飛ばすという機能性に着目して、
あえて例外処理で実現するケースも、あることはあります。
まとめると、
「例外を使えば通常処理が簡潔になるなら、使ってもよい、かもしれない、気がする」
No.1
- 回答日時:
ちょっと質問の意味がわからないのですが、eにどんな情報が入ってくるのかを知りたいのでしょうか。
もしくは、catchの使い方を知りたいのでしょうか。ちなみに、eの中身を知りたいなら、console.log(e)で見ることができますよ。console.logの結果は、ブラウザのコンソールから確認できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクトレベルとメタレベル
-
Object型からDouble型へのキャスト
-
Excelで =EMBED("Acrobat Docu...
-
質問すいません。 javascriptの...
-
開始日(Date型)から終了日(Date...
-
VBA 同じ名前のオブジェクトを...
-
【Java】入力した西暦→和暦に変...
-
オブジェクト指向とモジュール設計
-
パワーポイントのVBAでテキスト...
-
複数TBLのオブジェクトを1つの...
-
ワイルドカード<?>と型パラメー...
-
VBAのオブジェクトの値を保持し...
-
VBAのWindowオブジェクトとWork...
-
VBAからノーツを起動
-
オブジェクト名をforループ内で...
-
error C2712: オブジェクト ア...
-
Rangeオブジェクトを一時的に作...
-
時間帯判定をする。
-
AccessからMSペイントを起動さ...
-
Struts Listの情報がgetできない。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
サーブレットのクラス図について。
-
ビジュアルC++でボタンの有...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
VBA 同じ名前のオブジェクトを...
-
CoCreateInstanceでエラーになる。
-
戻り値がクラスオブジェクト
-
newは明示的にした方が良いのか?
-
CFileDialogでフォルダだけを選...
-
【Java】入力した西暦→和暦に変...
-
Accessの連結・非連結オブジェ...
-
Object型からDouble型へのキャスト
-
ASP.net 教えてください!!(...
-
error C2712: オブジェクト ア...
-
オブジェクトレベルとメタレベル
おすすめ情報