try...catch


try...catch
エラーが発生した場合、スクリプトはすぐに停止し、consoleにエラーを出力します.try...catch構文キャプチャエラーにより、スクリプトのハングアップを防止できます.
アクションアルゴリズム
try {
  // 코드
} catch(err) {
  // 에러 핸들링
}
  • try {}のコードが実行されます.
  • エラーがなければ、try {}の最後の行に実行し、catchブロックをスキップします.
  • エラーが発生した場合、try {}内の実行は停止し、catch(err)制御フローはブロックに移行します.
    変数errは、何が起こったかを記述するオブジェクトを含む.
  • 有効なコードのエラーのみを処理
    try {
      {{{{{{{{{{{{
    } catch(err) {
      alert("유효하지 않은 코드이기 때문에, 자바스크립트 엔진은 이 코드를 이해할 수 없다.");
    }
    try...catch実行可能な有効なJavaScriptコードで発生したエラーのみを処理できます.
    このエラーを「ランタイムエラー」または「例外」と呼びます.
    同期
    try {
      setTimeout(function() {
        noSuchVariable; // 스크립트는 여기서 죽음
      }, 1000);
    } catch (err) {
      alert( "작동 멈춤" ); // 실행안됨
    }
    setTimeoutに渡された匿名関数はtry...catchを離れた後に実行されるため、エラーをキャプチャできません.
    setTimeout(function() {
      try {
        noSuchVariable;
      } catch {
        alert( "에러를 잡았습니다!" ); // 에러를 잡음
      }
    }, 1000);
    エラー・オブジェクト
    エラーが発生した場合、JavaScriptはエラーの詳細を含むオブジェクトを生成します.次に、このオブジェクトをパラメータとしてcatchブロックに渡します.
    try {
      // 코드
    } catch(err) { // 에러객체 'err'
      // 에러 핸들링
    }
    メイン番組
  • nameエラー名.未定義の変数によるエラーの場合は、ReferenceErrorと名前が付けられます.
  • messageエラー詳細を含むテキストメッセージ
  • try {
      lalala; // 에러, 변수가 정의되지 않음!
    } catch(err) {
      alert(err); // ReferenceError: lalala is not defined 
      alert(err.name); // ReferenceError
      alert(err.message); // lalala is not defined
    }
    try...catchの使用
    入力フォーマットが間違っているJSONの場合、JSON.parse()は作成エラーのためにスクリプトを中断します.try...catchを使用してエラーを処理してみます.
  • 通常コード
  • let json = '{"name":"John", "age": 30}';
    let user = JSON.parse(json);
    alert(user.name); // John
    alert(user.age);  // 30
  • サーバから送信されたデータ
  • 送信JSON文字列をJavaScriptオブジェクト
  • に変換
  • 文字列形式で送信されるuserは、propertyを有するオブジェクト
  • となる
  • エラー
  • let json = "{ bad json }";
    try {
      let user = JSON.parse(json);
      alert( user.name ); // 동작하지 않음
    } catch (err) {
      alert( "데이터에 에러가 있어 재요청을 시도합니다." );
      console.log(err.name);
      console.log(err.message);
    }
  • JSON.parse()エラー
  • tryAncode即時停止
  • catchドアへ
  • ミススロー
    構文エラーですが、データが不完全なためエラーが発生します.
    let json = '{ "age": 30 }';
    try {
      let user = JSON.parse(json);
      alert( user.name ); // undefined
    } catch (e) {
      alert( "실행되지 않습니다." );
    }
    throw演算子throw演算子Errorを使用して、エラーを処理するオブジェクトを作成できます.
    let json = '{ "age": 30 }';
    try {
      let user = JSON.parse(json);
      if (!user.name) {
        throw new Error("불완전한 데이터: 이름 없음");
      }
      alert( user.name ); // 실행되지 않음
    } catch(e) {
      alert( "JSON Error: " + e.message );
    }
  • 不完全データ
  • JSON.parse()エラーはありません.
  • name存在しない場合はエラーとみなされ、エラーオブジェクト
  • が作成されます.
  • try直ちに停止し、catchに移動します.
  • alertウィンドウJSON Error: 불완전한 데이터: 이름 없음出力
  • リファレンス
    https://ko.javascript.info/try-catch