JavaScript エラー処理シリーズを続けながら、今日は Missing Parenthesis After Argument List JavaScript エラーを詳しく見ていきましょう。 Missing Parenthesis After Argument List エラーはさまざまな理由で発生しますが、ほとんどの SyntaxErrors と同様に、タイプミス、演算子の欠落、または文字列が適切にエスケープされていない場合によく発生します。
この記事では、Missing Parenthesis After Argument List エラーをもう少し詳しく検証し、それが JavaScript Exception 階層のどこに位置するか、またこのエラーが発生する原因も説明します。 それでは、行ってみましょう!
技術概要
- すべての JavaScript エラー オブジェクトは、
Errorオブジェクトの子孫、またはそこから継承されたオブジェクトです。 -
Missing Parenthesis After Argument ListエラーはSyntaxErrorオブジェクトの特定のタイプです。
When Should You Use It?
はじめに述べたように、Missing Parenthesis After Argument Listエラーはさまざまな理由で発生する可能性があります。 ほとんどの場合、問題はタイプミスまたは何らかの演算子を忘れていることに関連しています。
JavaScriptにおける非常に典型的な動作は、複数の文字列を concatenate 連結して、1つの大きな文字列を形成することです。 これは、2 つの文字列の間に単純な + 演算子を使用して実行できます。 console.log("Hello " + "world");
あるいは、バックチック (`) とブラケット ({}) 構文を使用して、インラインで文字列を連結することもできます。 console.log(`Hello ${worldVar}`);
どのように行うかに関係なく、多くの JavaScript メソッドは、console.log() メソッドを含む、(文字列などの) 不特定多数の引数を受け入れます。
var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { var name = "Jane Doe"; console.log("Name is:" name);} catch (e) { if (e instanceof SyntaxError) { printError(e, true); } else { printError(e, false); }}
その結果、すぐに Missing Parenthesis After Argument List エラーが発生します。
Uncaught SyntaxError: missing ) after argument list
お気づきのように、console.log() に 2 つの引数を渡しましたが、通常のコンマ (,) で区切っておらず、上記のメソッドのいずれかを使用して 2 つの文字列値を一緒に結合していません。 このため、JavaScriptは最初の文字列(is:")の終わりに到達して次の引数(name)に移るまでは、このコードをうまく解析する。 連結することも、カンマ区切り文字を使用して別の引数を期待することも伝えていないので、JavaScript はそれが console.log() メソッドへの引数リストの最後であると予想し、閉じ括弧がない ()) ことを発見し、Missing Parenthesis After Argument List エラーを投げます。
解決策はコードの動作によりますが、このケースでは console.log() に引数を渡しているので、直接連結するか、単にカンマ区切りを追加して達成することができます。
var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { var name = "Jane Doe"; console.log("Name is:", name);} catch (e) { if (e instanceof SyntaxError) { printError(e, true); } else { printError(e, false); }}
これで期待通りの名前が出力されました:
Name is: Jane Doe
確かにかなり簡単な修正ですが、これが Missing Parenthesis After Argument List エラーと SyntaxErrors 全般の問題点です。 これらはすべて、一度発見されれば非常に明白ですが、コード エディターがコードを解析し、その場で構文エラーを評価しない限り、自分でコードをテストアウトするまで、しばしば見逃してしまいがちなのです。 問題は構文なので、JavaScript エンジンが問題のあるコードを実行しようとすると、その瞬間に失敗してしまいます。 これは通常、ブロックの catch 部分を正しく解析する方法を知らないため、その部分へ進むことができる実行ポイントに到達していないことを意味します。 これは、異なるファイルやレイヤーを介して実行を分散させることで回避できますが、すべての基本的な意図と目的のために、catching SyntaxErrors は大きな課題です。
アプリケーションが JavaScript エラーに対処する方法をさらに深く理解するには、リアルタイム アラートと JavaScript コードで何が問題だったかの即時洞察を行う革新的な Airbrake JavaScript エラー追跡ツールに注目してください。
