strictモード (厳格モード)
メモ
- strictモード (厳格モード) では機能制限
- 記述方法:"use strict" または 'use strict'
- スクリプト全体:スクリプトの先頭に記述
- 関数内:関数内の先頭に記述
- class【クラス】 内では strictモード で実行
制限事項
仕様上、重複あり
- 将来の追加予約語の使用不可
- 8進数は使用不可 (0on~n 形式は使用可能 )
- 8進数のエスケープシーケンスは使用不可 ("\101":"A")
- 宣言なしの変数の使用不可 (ReferenceError 例外)
読み取り専用プロパティ ・setterなしのアクセサプロパティ ・拡張不可オブジェクトの存在しないプロパティ の代入不可 (TypeError 例外) - eval・arguments は、代入演算子の左辺・++【インクリメント演算子】や--【デクリメント演算子】の対象にできない
- arguments 【引数】のcallee・callerへのアクセス不可 (TypeError 例外)
- arguments 【引数】の配列アクセス不可
- 関数内strictモードでarguments 【引数】への代入不可
- オブジェクト リテラルの重複プロパティ不可 (SyntaxError 例外)
- オブジェクトのsetterのパラメータとして eval・arguments は使用不可 (SyntaxError 例外)
- eval 関数内部で宣言された変数は、内部でのみ有効
- this の値が null または undefined の場合、グローバル オブジェクトへの変換なし
関数に渡された this はオブジェクトへの変換なし - 変数・関数の引数・関数名 を delete で削除不可 (SyntaxError 例外)
- 変更不可のプロパティ を delete で削除不可 (TypeError 例外)
- eval・arguments は変数として使用不可 (SyntaxError 例外)
- with ステートメントは使用不可 (SyntaxError 例外)
- eval・arguments は catch 節の識別子として使用不可 (SyntaxError 例外) 例:catch (eval)
- eval・arguments は関数名として使用不可 (SyntaxError 例外)
- 関数で重複パラメータ名は使用不可 (SyntaxError 例外)
- 関数内の caller・arguments プロパティを実装で拡張不可
- eval・arguments は関数名・関数のパラメータとして使用不可 (SyntaxError 例外)
関連
外部リンク (英語)
Directive Prologues and the Use Strict Directive | ||
---|---|---|
ES2024 (15) | ES2023 (14) | ES2022 (13) |
The Strict Mode of ECMAScript | ||
ES2024 (15) | ES2023 (14) | ES2022 (13) |