TECH I.S.

JavaScript Use Strict


"use strict";JavaScriptコードを「strict(厳密)モード」で実行する必要があることを定義します。

「use strict」ディレクティブ

この"use strict"ディレクティブは、ECMAScriptバージョン5で新しく追加されました。

これはステートメントではなくリテラル式であり、以前のバージョンのJavaScriptでは無視されます。

"use strict"の目的は、コードを「厳密モード」で実行する必要があることを示します。

厳密モードでは、たとえば、宣言されていない変数を使用することはできません。

Internet Explorer9以前を除き、最新のブラウザーはすべて「use strict」をサポートしています。


Directive

"use strict" 13.0 10.0 4.0 6.0 12.1

表内の数字は、ディレクティブを完全にサポートする最初のブラウザ バージョンを示しています。


すべてのプログラムで厳密モードを使用できます。宣言されていない変数の使用を防ぐなど、よりクリーンなコードを作成するのに役立ちます。
"use strict"は単なる文字列なので、IE9が理解できなくてもエラーにはなりません。





Strictモードの宣言

Strictモードは、スクリプトまたは関数の先頭に「use strict」を追加することで宣言されます。

スクリプトの先頭で宣言され、グローバルスコープを持ちます(スクリプト内のすべてのコードは厳密モードで実行されます)。

"use strict"; x = 3.14;       // This will cause an error because x is not declared

"use strict"; myFunction(); function myFunction() {   y = 3.14;   // This will also cause an error because y is not declared }

関数内で宣言され、ローカルスコープを持ちます(関数内のコードのみが厳密モードです)。

x = 3.14;       // This will not cause an error. myFunction(); function myFunction() {   "use strict";   y = 3.14;   // This will cause an error }


"use strict;"構文

厳密モードを宣言するための構文は、古いバージョンのJavaScriptと互換性があるように設計されています。

JavaScriptプログラムで数値リテラル(4+5;)または文字列リテラル("John Doe";)をコンパイルしても、副作用はありません。存在しない変数にコンパイルされて終了するだけです。

つまり"use strict";は、その意味を「理解」する新しいコンパイラにとってのみ重要です。


厳密モードの理由

Strictモードを使用すると、「安全な」JavaScriptを簡単に記述できます。

Strictモードは、以前に受け入れられた「不適切な構文」を実際のエラーに変更します。

例として、通常のJavaScriptでは、変数名をタイプミスすると、新しいグローバル変数が作成されます。厳密モードでは、これによりエラーがスローされ、誤ってグローバル変数を作成することができなくなります。

通常のJavaScriptでは、書き込み不可のプロパティに値を割り当てても、開発者はエラーフィードバックを受け取りません。

厳密モードでは、書き込み不可のプロパティ、getterのみのプロパティ、存在しないプロパティ、存在しない変数、または存在しないオブジェクトへの割り当ては、エラーをスローします。


Strictモードでは許可されていません

変数を宣言せずに使用することは許可されていません。

"use strict"; x = 3.14;                // This will cause an error

オブジェクトも変数です。

宣言せずにオブジェクトを使用することは許可されていません。

"use strict"; x = {p1:10, p2:20};      // This will cause an error

変数(またはオブジェクト)の削除は許可されていません。

"use strict"; let x = 3.14; delete x;                // This will cause an error

関数の削除は許可されていません。

"use strict"; function x(p1, p2) {}; delete x;                // This will cause an error 

パラメータ名の重複は許可されていません。

"use strict"; function x(p1, p1) {};   // This will cause an error

8進数リテラルは使用できません。

"use strict"; let x = 010;             // This will cause an error

8進数のエスケープ文字は使用できません。

"use strict"; let x = "\010";            // This will cause an error

読み取り専用プロパティへの書き込みは許可されていません。

"use strict"; const obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14;            // This will cause an error

取得専用プロパティへの書き込みは許可されていません。

"use strict"; const obj = {get x() {return 0} }; obj.x = 3.14;            // This will cause an error

削除不可能なプロパティの削除は許可されていません:

"use strict"; delete Object.prototype; // This will cause an error

単語をeval変数として使用することはできません。

"use strict"; let eval = 3.14;         // This will cause an error

単語をarguments変数として使用することはできません。

"use strict"; let arguments = 3.14;    // This will cause an error

次のwithステートメントは許可されていません。

"use strict"; with (Math){x = cos(2)}; // This will cause an error

セキュリティ上の理由から、eval()呼び出し元のスコープ内で変数を作成することはできません。

厳密モードでは、宣言する前に変数を使用することはできません。

"use strict"; eval ("x = 2"); alert (x);      // This will cause an error

strictモードでは、 eval()はvar キーワードを使用して変数を宣言できません。

"use strict"; eval ("var x = 2"); alert (x);    // This will cause an error

eval()は、letキーワードを使用して変数を宣言できません。

eval ("let x = 2"); alert (x);        // This will cause an error

this関数内のキーワードは、厳密モードでは異なる動作をします。

キーワードthisは、関数を呼び出したオブジェクトを参照します。

オブジェクトが指定されていない場合、厳密モードの関数は戻りundefined通常モードの関数は、グローバルオブジェクト(ウィンドウ)を返します。

"use strict"; function myFunction() {   alert(this); // will alert "undefined" } myFunction();


将来性の保証!

将来のJavaScriptバージョン用に予約されているキーワードは、厳密モードでは変数名として使用できません。

これらは:

・implements
・interface
・let
・package
・private
・protected
・public
・static
・yield

"use strict"; let public = 1500;      // This will cause an error

注意!

「use strict」ディレクティブは、スクリプトまたは関数の先頭でのみ認識されます。



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細