ServiceNow の JavaScript のエスケープ文字Issue 特定の文字を JavaScript の文字列で使用すると、スクリプト内で予期しないエラーが発生する場合があります。こうしたエラーは場合によっては確認が難しいことがあります。このような Javascript の文字列は、ビジネスルール、ワークフロースクリプト、ACL レコードなど、アプリケーション内の多数の部分で、ServiceNow プラットフォームのスクリプティングをサポートする各種のオブジェクトタイプ内で使用される可能性があります。 こうした特殊文字がコマンド内で使用されると、JavaScript 言語にとって特殊な意味を持つため、通常は問題が発生します。 ServiceNow の Javascript でサポートされているオブジェクトで、必要に応じて文字列でこのような文字を使用できるようにするには、対象の文字をエスケープする必要があります (JavaScript コンパイラに対して、ある文字を通常の方法で解釈するのではなく、そのまま普通の文字として取り扱うように指示するための特殊な文字を前に付けます)。 方法 ユーザーが使用しなければならない可能性があり、エスケープ文字が必要とされる 3 つの主要な文字は、一重引用符 (')、二重引用符 (")、バックスラッシュ文字 (\) です。 これらの文字に特殊な処理が必要な理由は、一重引用符と二重引用符は JavaScript の文字列の開始と終了に使用され、バックスラッシュはそれ自体がエスケープ文字であるためです。 このような文字のエスケープは簡単であり、文字列内で普通の文字として扱う文字の前にバックラッシュ文字 (\) を置くだけです。したがって、\' と書くと単一引用符を文字列内でそのままの文字として、\" と書くと二重引用符をそのまま文字として、\\ と書くとバックスラッシュをそのまま文字として、それぞれ文字列内で使用できます。 例 たとえば、以下の 2 つの JavaScript ステートメントでは、これらの特殊文字が文字列に含まれていることが原因で、それぞれエラーが生成されます。 var userName = "Jerome "The Race" Anderson"; このステートメントは、次のエラーメッセージ出力を生成します。 Javascript compiler exception: missing ; before statement (null.null.script; line 1) in: var userName = "Jerome "The Race" Anderson"; また、次の JavaScript ステートメントにも、文字列に特殊文字が含まれています。 gs.log('Please retry the operation, the expected button wasn't found on the form.'); 文字列に特殊文字が含まれているため、次のエラーが生成されます。 Javascript compiler exception: missing ) after argument list (null.null.script; line 1) in: gs.log('Please retry the operation, the expected button wasn't found on the form.'); 次のステートメントは必ずしもエラーを生成するわけではありませんが、ほとんどの場合、期待される結果が出力されません。 var filepath = "\\bzavr\extra\open\files\config.ini"; メモリに格納されるファイルパス変数に実際に含まれるは、次の文字列テキストになります。 \bzavrextraopenilesconfig.ini これらの問題を修正してステートメントが正しく機能するようにするには、文字列内の各特殊文字の前に Javascript のバックスラッシュエスケープ文字を付ける必要があります。 したがって、先ほどのステートメントを以下のように書き直すと、文字列にこのような特殊文字が存在することが原因で発生する可能性がある問題を防ぐことができます。 var userName = "Jerome \"The Race\" Anderson";gs.log('Please retry the operation, the expected button wasn\'t found on the form.');var filepath = "\\\\bzavr\\extra\\open\\files\\config.ini"; 補足情報 また、バックスラッシュ文字を使用すると、Javascript 文字列内に特殊な非表示文字を含めることもできます。以下は、文字の組み合わせと、非表示文字の意味を示しています。 エスケープ文字文字表現 \b バックスペース \f フォームフィード \n 改行 \r キャリッジリターン \t 水平タブ \v 垂直タブ したがって、これらの非表示文字を Javascript 文字列に含めるには、エスケープ文字を追加する必要があります (改行を含めるには \n を追加)。 たとえば、 var textData = "This is a test string.\n\rNext Line.\tShifted line."; というステートメントの出力は以下のようになります。 This is a test string.Next Line. Shifted line.