最終更新:2017-10-13 (金) 15:50:35 (2378d)
Strictモード
Top / Strictモード
https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode
動作
- strict モードでは、通常の JavaScript の意味にいくつかの変更を加えます。第一に strict モードでは、JavaScript でエラーではないが落とし穴になる一部の事柄を、エラーが発生するように変更することで除去します。第二に strict モードでは、JavaScript エンジンによる最適化処理を困難にする誤りを修正します
ミスからエラーへの変換
- strict モードでは、従来は受け入れていた一部のミスをエラーに変更します。
- 偶発的にグローバル変数?を作成できないようにします
- 代入文で暗黙的に失敗せずに例外が発生するようにします
- 削除できないプロパティを削除しようとするとエラーが発生します
- オブジェクトリテラル内のプロパティ名はユニークであることを必須にします。
- 関数の引数名がユニークであることを必須にします
- 8進数表記を禁止します
変数の使用の単純化
evalおよびargumentsの単純化
- arguments および eval の奇妙さを低減します
- eval および arguments という名前に対して言語構文でのバインドや代入を不可にします
- 内部で作成された arguments オブジェクトのプロパティがエイリアスになりません
- arguments.calleeをサポートしません。
JavaScript の "セキュア化"
- thisとして関数に渡された値をオブジェクトへボクシングしません
- ECMAScript の一般的な実装である拡張を通して JavaScript のスタックを "渡り歩く" ことができません。
- arguments は対応する関数の呼び出し時の変数にアクセスできません
- arguments.callerは書き込みや読み出し時にエラーが発生する、削除不可のプロパティです
参考
将来の ECMAScript への準備
- いくつかの識別子を予約語にします
- スクリプトのトップレベルまたは関数内にないfunction文?を禁止します。