JavaScriptのstrictモードについて詳しく解説します

JavaScript

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;
}
タイトルとURLをコピーしました