[javascript deepdave第47章&48章]エラー処理&モジュール


第47章|エラー処理|


47.1エラー処理が必要


エラーのないコードを書くことはできません.そのため、エラーは常に発生する可能性があります.発生したエラーを無視すると、プログラムは強制的に終了します.
try...catch文を使用してエラーに適切な応答を行うと、プログラムは強制的に終了することなくコードを実行し続けることができます.
  • では、直接エラーが発生しない例外が発生する可能性があります.例外に適切に対応しないと、誤りを招く可能性が高い.
  • 上記の例のquerySelectorメソッドでは、パラメータとして渡される文字列がCSSセレクタ構文に合致しない場合にエラーが発生します.
  • ただしquerySelectorメソッドは、パラメータ伝達CSSセレクタ文字列にDOM要素ノードが見つからない場合、エラーが発生せずnullを返すのではなく、
  • を返す.
  • if文を使用してquerySelectorメソッドの戻り値をチェックしないか、ショートカットを使用して処理しないと、エラーが発生する可能性があります.

  • 47.2 try...catch...最後の一言


    デフォルトでは、エラーを処理する方法は2つあります.
    異常の場合(例えば
  • querySelectorまたはArray#findメソッド)、if文、クイック評価または光学フィルタ演算子によって戻り値を決定し、処理する方法:
  • .
  • エラー処理:try...catch...方法
  • try...catch...finally文を実行するときは、まずtryコードブロックを実行します.
  • ここでエラーが発生した場合、エラーはcatch文のerr変数に渡され、catchコードブロックはを実行します.
    24172仕入先勘定科目のcatch文のerr変数は、tryコードブロックに含まれる文でエラーが発生した場合に生成されます.catchコードブロックでのみ有効です.
    エラーが発生するかどうかにかかわらず、finallyは1回実行する必要があります.
    これもPythonで一生懸命勉強しました.

    47.3 Errorオブジェクト


    Errorジェネレータ関数は、エラーオブジェクトを生成します.Errorジェネレータ艦崇は、エラーを詳細に説明するエラーメッセージをパラメータとして渡すことができる.

    Errorジェネレータ関数によって生成されたエラーオブジェクトには、メッセージ構成とスタック構成があります.Message propertyの値は、Errorコンストラクション関数に引数として渡されるエラーメッセージであり、stack propertyの値は、デバッグのためにエラーを引き起こす呼び出しスタック情報を表す文字列である.
    JavaScriptは、Errorコンストラクション関数を含む7つのErrorオブジェクトを作成できるErrorコンストラクション関数を提供します.コンストラクション関数によって作成されたすべてのエラーオブジェクトのプロトタイプはエラーです.プロトタイプを継承します.

    [コンストラクション関数/インスタンス]

  • エラー:一般的なエラー・オブジェクト
  • SyntaxError:JavaScript構文に合致しない文を解釈するときに発生するエラーオブジェクト
  • ReferenceError:参照できない識別子を参照するときに発生するエラーオブジェクト
  • 型エラー:演算子または引数のデータ型が無効な場合に発生するエラーオブジェクト
  • RangeError:数値許容範囲外で発生したエラーオブジェクト
  • URIError:encodeURIまたはdecodeURI関数に無効なパラメータを渡すときに発生するエラーオブジェクト
  • EvalError:eval関数のエラーオブジェクト
  • 47.4投げドア

  • Errorジェネレータ関数を使用してエラーオブジェクトを作成しても、エラーは発生しません.すなわち,エラーオブジェクト生成とエラー発生の意味が異なる.
  • エラーを生成するには、tryコードブロックからthrow文にエラーオブジェクトを投げ出す必要があります.
  • throw 표현식;

    throw文の式は値の影響を受けませんが、通常はエラーオブジェクトを指定します.エラーが投げ出されると、catch文はエラー変数を生成し、投げ出されたエラーオブジェクトを割り当てます.次にcatchコードブロックが実行されます.

    47.5エラー伝播


    呼び出しスタックの下(実行中のシードコンテキストがプッシュされる前にプッシュされる実行コンテキストの方向)に伝播する.

  • (1)でtest 2関数を呼び出すと、(2)でtest関数を呼び出し、(3)でfoo関数を呼び出し、foo関数は(4)でエラーを投げ出す.この場合、foo関数が投げ出したエラーは、呼び出し元に次のように伝播し、グローバルにキャプチャされます.

  • このような投げ出されたエラーが捉えられなければ,呼び出し者方向に伝播する.この場合、投げ出されたエラーをキャプチャして適切な応答を行うと、プログラムを強制的に終了することなくコードの実行ストリームを復元することができる.どこにもthrowエラーがキャプチャされていない場合、プログラムは強制的に終了します.
  • 第48章|モジュール|


    48.1モジュールの一般的な意味


    モジュール向け:モジュールとアプリケーションを構成する再利用可能なコードブロックを指す.通常、モジュールは機能に応じてファイル単位で分離されます.このとき,モジュールを成立させるには,モジュールに独自のファイルスキャン(モジュールスキャン)が必要である.
    独自のファイルスキャン機能を持つモジュールの資産(モジュールに含まれる関数、変数、オブジェクトなど)は、基本的に非公開です.(パッケージ)
    しかし、アプリケーションから完全に分離された独立したモジュールは再利用できないため、存在する意味がありません.モジュールは、アプリケーションまたは他のモジュールで再使用する必要があります.したがって、モジュールは、開示が必要な資産に対して明示的に選択的に開示することができる.これを出口と言います.
    公開(export)モジュールの資産は、他のモジュールで繰り返し使用できます.このとき,公開モジュール資産を用いたモジュールをモジュールユーザと呼ぶ.モジュールユーザーは、モジュール公開(export)の資産の一部または全部を選択し、自分のリポジトリにロードして再使用できます.import.

    48.2 JavaScriptとモジュール


    JavaScriptランタイム環境ノード.jsはモジュールシステムの事実上の標準CommonJSを採用し、独立したアップグレードを経て、基本的にCommonJS規範に従う.だから、ノード.js環境では、各ファイルに独立したファイルスキャン(モジュールスキャン)があります.

    48.3 ES 6モジュール(ESM)


    この場合、ES 6はクライアントJavaScriptで実行されるモジュール機能も追加される.IEを除いて、ほとんどのブラウザで使用できます.ES 6モジュールの使用は非常に簡単です.type=「module」ツリーをscriptラベルに追加すると、ロードされたJavaScriptファイルがモジュールとして動作します.ESMファイルが標準のJavaScriptファイルではないことを明確にするために、ESMのファイル拡張子にmjsを使用することをお勧めします.
    <script type = "module" scr = "app.mjs"> </script>

    ESMは、ファイル自体の独立したモジュールスキャンを提供します.したがって、モジュールでvarキーワードとして宣言された変数はグローバル変数ではなく、windowオブジェクトのpropertyではありません.

    48.3.2 exportキーワード


    モジュールには独立したモジュールスキャンがあります.したがって、モジュール内で宣言されたすべての識別子は、基本的にモジュール内でのみ参照できます.モジュール内部で宣言された識別子を外部に公開し、他のモジュールが再使用できるようにするには、exportキーワードを使用します.
  • exportキーワード文を宣言する前に、変数、関数、クラスなどのすべての識別子をエクスポートできます.
  • 宣言の前に各exportキーワードを付けるのが面倒な場合は、エクスポートするオブジェクトを1つのオブジェクトにして、1回にエクスポートできます.
  • 48.3.3 importキーワード


    importキーワードを使用して、他のモジュールで公開されている識別子を自分のモジュールscopeにロードします.他のモジュールからエクスポートされた識別子名でインポートする必要があります.ESMの場合、ファイル拡張子は省略できません.

    上記の例のappです.mjsはアプリケーションのエントリポイントであり、scriptラベルを使用してロードする必要があります.でもmjsはappこれはmjsのimport文によってロードされる依存性です.したがって、例48〜12.mjsはscriptラベルでロードする必要はありません.
    モジュールは、エクスポートされた識別子名を一度に指定することなく、名前を一度にインポートできます.このとき、インポートされた識別子は、asの後ろに指定された名前のオブジェクトにpropertyとして割り当てられる.

    また、
  • モジュールからエクスポートされた識別子名を変更することによってインポートすることもできます.
  • モジュールが1つの値しかエクスポートしない場合、defaultキーワードを使用できます.defaultキーワードを使用する場合、デフォルトでは名前付きepxortの値はありません.
  • export default x => x * x; 
    defaultキーを使用する場合、var、let、constキーは使用できません.defaultキーとともにエクスポートされたモジュールは{}を使用して任意の名前でインポートされません.
    //app.mjs
    import square from './lib.mjs'
    
    console.log(square(3)); //9