目次
JavaScriptのstrictモードとは
JavaScriptは動的なスクリプト言語です。
JavaやC#などのサーバーサイドの言語を扱ったことがある人なら、その厳密さに馴染みがあるはずです。例えば、変数を定義する前に使用した場合、コンパイラがエラーを出すことを期待します。
JavaScriptでは、ECMAScript5以降で「use strict」を使用したコードの厳密化が可能です。JavaScriptのコードの先頭や関数内に「use strict」と記述してください。
"use strict";
let x = 1; // strictモードでも問題なし
y = 1; // strictモードだと有効でない
JavaScriptのストリクトモードでは、以下のことができません。
- 未定義の変数の使用
- 変数名や関数名としての予約キーワードの使用
- オブジェクトのプロパティが重複
- 関数のパラメータの重複
- 読み取り専用のプロパティに値を割り当てる
- 引数オブジェクトの変更
- 8進数の数値リテラル
- ステートメント付き
- eval関数による変数の作成
それでは、上記のそれぞれの例を見てみましょう。
未定義の変数の使用
"use strict";
x = 10; // error
名前に予約語を使用する
"use strict";
let for = 10; // error
let if = 10; // error
オブジェクトのプロパティの重複
"use strict";
let obj = { myProp: 1000, myProp:"strict mode" }; // error
パラメータの重複
"use strict";
function Sum(val, val){return val + val }; // error
読み取り専用のプロパティに値を割り当てる
"use strict";
let arr = [1 ,2 ,3 ,4, 5, 6, 7];
arr.length = 20; // error
引数オブジェクトの修正
"use strict";
function Sum(a, b){
arguments = 200; // error
}
8進数の数値リテラル
"use strict";
let oct = 030; // error
ステートメント付き
"use strict";
with (Math){
x = abs(200.234, 2); // error
};
変数を作成するEval関数
"use strict";
eval("var x = 1");// error
特定の関数のみにstrictモードを適用する
strictモードは、特定の関数にのみ厳格化を実装するために、関数レベルで適用することができます。
x = 1; //valid
function sum(a, b){
"use strict";
result = a + b; //error
return result;
}