strictモード (厳格モード)

メモ

  • strictモード (厳格モード) では機能制限
  • 記述方法:"use strict" または 'use strict'
    • スクリプト全体:スクリプトの先頭に記述
    • 関数内:関数内の先頭に記述
  • class【クラス】内では strictモード で実行

制限事項

仕様上、重複あり
  1. 将来の追加予約語の使用不可
  2. 8進数は使用不可 (0on~n 形式は使用可能 )
  3. 8進数のエスケープシーケンスは使用不可 ("\101":"A")
  4. 宣言なしの変数の使用不可 (ReferenceError 例外)
    読み取り専用プロパティ ・setterなしのアクセサプロパティ ・拡張不可オブジェクトの存在しないプロパティ の代入不可 (TypeError 例外)
  5. eval・arguments は、代入演算子の左辺・++【インクリメント演算子】や--【デクリメント演算子】の対象にできない
  6. arguments 【引数】のcallee・callerへのアクセス不可 (TypeError 例外)
  7. arguments 【引数】の配列アクセス不可
  8. 関数内strictモードでarguments 【引数】への代入不可
  9. オブジェクト リテラルの重複プロパティ不可 (SyntaxError 例外)
  10. オブジェクトのsetterのパラメータとして eval・arguments は使用不可 (SyntaxError 例外)
  11. eval 関数内部で宣言された変数は、内部でのみ有効
  12. this の値が null または undefined の場合、グローバル オブジェクトへの変換なし
    関数に渡された this はオブジェクトへの変換なし
  13. 変数・関数の引数・関数名 を delete で削除不可 (SyntaxError 例外)
  14. 変更不可のプロパティ を delete で削除不可 (TypeError 例外)
  15. eval・arguments は変数として使用不可 (SyntaxError 例外)
  16. with ステートメントは使用不可 (SyntaxError 例外)
  17. eval・arguments は catch 節の識別子として使用不可 (SyntaxError 例外) 例:catch (eval)
  18. eval・arguments は関数名として使用不可 (SyntaxError 例外)
  19. 関数で重複パラメータ名は使用不可 (SyntaxError 例外)
  20. 関数内の caller・arguments プロパティを実装で拡張不可
  21. eval・arguments は関数名・関数のパラメータとして使用不可 (SyntaxError 例外)