---
sourceDocument: Xanadu API リファレンス
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ja-JP/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - ja-JP

ft:publication_title :

    - Xanadu API リファレンス

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# JavaScript モードの切り替えに関する考慮事項

# JavaScript モードの切り替えに関する考慮事項 {#ariaid-title1}

* リリースバージョン: Xanadu
* 
* 更新日 2024年08月01日
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 所要時間：5分

アプリケーションまたはスクリプトの JavaScript モードを切り替えると、既存のスクリプトの動作が変わる可能性があります。JavaScript モードを切り替える前、または切り替え後に発生した問題のトラブルシューティングを行う前に、動作の変化の例をいくつか確認してください。

各 JavaScript モードの詳細については、「 [JavaScript モード](https://servicenow-prod.fluidtopics.net/IJV1Y7UJT2oxNRCdgll7eA "JavaScript モードは、カスタムアプリケーションとスクリプトの設計および実行時の設定です。既存のサーバー側スクリプトと、ECMAScript 2021 標準に合わせて新しく開発されたスクリプトをサポートするために、JavaScript エンジンには ECMAScript 2021 (ES12)、ES5 標準、および互換の 3 つのモードがあります。") 」と「 [JavaScript エンジン機能のサポート](https://servicenow-prod.fluidtopics.net/urQP0r1hKAEc_cvDIT9LxQ "Xanadu の ECMAScript 2021 (ES12) と ES5 標準 JavaScript モード間の ECMAScript 機能を比較します。どちらのモードも ECMAScript 機能のサブセットをサポートしています。")」を参照してください。

この表は、JavaScript の動作が、寛大でエラーが発生しやすい ES5 以前の環境から、より厳格で予測可能な ES5、そして最後に ES12 のより機能豊富な環境へとどのように進化したかを示しています (ECMAScript 2021)。  
{#considerations-switching-javascript-mode__table_r4b_j4r_fcc__entry__4}

| 機能 | 互換モード | ES5 標準モード | ECMAScript 2021 (ES12) |
|-|-|-|-|
| Arguments オブジェクト | `arguments` オブジェクトは存在しますが、`strict モード`がないため、変更は`引数に反映されます`。プリント： *** Script: [object Arguments] *** Script: [object Arguments] *** Script: [object Arguments] *** Script: 123 | strict モードでは、arguments オブジェクトはパラメーターの変更を反映せず、エラーをスローします。プリント： sn_es5: 123 sn_es5: undefined sn_es5: [object Arguments] sn_es5: 123 | ES5 と同じです。 |
| ブール値の上書き | プリミティブブール値 (`true`、 `false`) をオーバーライドすると、予期しない動作が発生する可能性があります。 | プリミティブブール値はより保護されていますが、変数に代入するとオーバーライドできます。 | ES5 と同じですが、strict モードでは一部の割り当てを防ぐことができます。条件式は、次の形式で記述する必要があります。 (cond_expr instanceof Boolean ? cond_expr.valueOf() : cond_expr). |
| 構文エラーの例外 | 構文エラーは実行時に例外をスローします。エラー処理に一貫性がありません。例： Javascript compiler exception: unterminated string literal (null.null.script; line 1) in: var b = ' | 特に strict モードでの、より一貫性のある構文エラー処理。例： Evaluator: com.glide.script.RhinoEcmaError: unterminated string literal script : Line(1) column(9) ==>   1: var b = ' | ES5 と同じですが、更新されたエンジンでは、より堅牢な処理とより明確なエラー メッセージがあります。例： SyntaxError: Unterminated string constant at line 1 ==>   1: var b = ' |
| インクリメントとデクリメント | 変数に対して許可されますが、複雑な式では予期しない動作になる可能性があります。プリント： *** Script: c: 1 *** Script: gr.related_incidents: 1 *** Script: 2 *** Script: 3 | 明瞭さが向上しましたが、変数(`var`、 `let`、 `const`)で引き続き許可されます。プリント： sn_es5: c: 0 sn_es5: gr.related_incidents: 1 sn_es5: 1 sn_es5: 2 | ES5 と同じですが、一部のコンテキスト ( `const` など) でより厳格なルールがあります。 |
| 行の継続 | バックスラッシュ (`\`) で指定できますが、読みやすさの問題のためお勧めしません。この例では、3 つの関数がすべて呼び出されます。 var expr = doFoo();  // do foo doBar();  // do bar finish();   // all done eval(expr); | 互換モードと同じです。処理ラインの継続に変更はありません。前の例では、ES5 は最初の関数のみを呼び出し、式が終了するまで、改行を含む最初のコメントの後のすべてをコメントとして扱います。 | ES5 と同じですが、テンプレートリテラルはより読みやすい代替手段を提供します。 |
| セミコロンの欠落 | セミコロンの自動挿入 (ASI) により、予期しない動作が発生することがよくありました。 | セミコロンがない場合、構文エラーをスローします。 | ES5 と同じです。更新されたプラクティスでは、明示的なセミコロンが推奨されています。 |
| 存在しない関数 | 存在しない関数を呼び出すと、 `ReferenceError` がスローされます。 | 非関数が呼び出された場合、 `TypeError` をスローします。 | 存在しない関数が呼び出されたとき、またはプロパティが参照されたときに EcmaError をスローします。 |
| 存在しないプロパティ | 存在しないプロパティにアクセスすると `undefined` が返されます。スローされたエラーはありません。 | ES5 以前と同じです。 | 互換モードや ES5 標準モードと同じです。 |
| 数値リテラル | 基本的な 10 進数および 16 進リテラル。 | より厳格な解析ルールが導入され、数値リテラルの処理が改善されました。 | バイナリ (`0b`)、8 進数 (`0o`)、BigInt リテラル (`123n`) が追加されました。 |
| プロパティとして予約済みのキーワード | 予約済みキーワードを使用することはできません。 | 予約済みキーワードは、 `obj.for` のように、エラーなしでプロパティ名として使用できます。返されたときにオブジェクトを出力します。 | ES5 と同じです。 |
| let と yield をキーワードとして扱う | `let` と `yield` はキーワードではなく、識別子としてのみ使用できます。 | `let` がキーワードとして導入されています。 `yield` は strict モードで予約されています。 | どちらもキーワードです。これらを識別子として使用すると、構文エラーがスローされます。 |
[表 : 1. JavaScript モードでの動作の違い]

{#considerations-switching-javascript-mode__table_r4b_j4r_fcc}

