- Toggle shortcuts help
?
- Toggle "can call user code" annotations
u
- Navigate to/from multipage
m
- Jump to search box
/
- Toggle pinning of the current clause
p
- Jump to the nth pin
1-9
- Jump to the 10th pin
0
- Jump to the most recent link target
`
Annex C (informative) ECMAScript の Strict Mode
Strict mode の制約と例外
-
implements
, interface
, let
, package
, private
, protected
, public
, static
, および yield
は strict mode コード内では予約語である (12.7.2)。
-
適合実装は strict mode コードを処理する際、生成規則
NumericLiteral :: LegacyOctalIntegerLiteral
および
DecimalIntegerLiteral :: NonOctalDecimalIntegerLiteral
のインスタンスを禁止しなければならない。
-
適合実装は strict mode コードを処理する際、生成規則
EscapeSequence :: LegacyOctalEscapeSequence
および
EscapeSequence :: NonOctalDecimalEscapeSequence
のインスタンスを禁止しなければならない。
-
宣言されていない識別子または解決不能な参照への代入はグローバルオブジェクトにプロパティを作成しない。Strict mode コード内で単純代入が行われる場合、その LeftHandSideExpression は解決不能 Reference に評価されてはならない。そうなった場合 ReferenceError 例外が投げられる (6.2.5.6)。LeftHandSideExpression はまた { [[Writable]]: false } の属性値を持つデータプロパティ、{ [[Set]]: undefined } の属性値を持つアクセサプロパティ、あるいは [[Extensible]] 内部スロットが false のオブジェクトに存在しないプロパティを参照してはならない。これらの場合
TypeError
例外が投げられる (13.15)。
-
StringValue が "eval" または "arguments" の IdentifierReference は代入演算子 (13.15) の LeftHandSideExpression、UpdateExpression (13.4)、あるいは Prefix Increment (13.4.4) / Prefix Decrement (13.4.5) 演算子により操作される UnaryExpression として現れてはならない。
-
Strict 関数の arguments オブジェクトはアクセス時に TypeError 例外を投げる設定不可能なアクセサプロパティ "callee" を定義する (10.4.4.6)。
-
Strict 関数の arguments オブジェクトは対応する仮引数バインディングと 配列インデックス プロパティ値を動的に共有しない (10.4.4)。
-
Strict 関数で arguments オブジェクトが生成された場合、ローカル識別子
arguments
のそのオブジェクトへのバインディングは不変であり、代入式のターゲットになり得ない (10.2.11)。
-
Strict mode コード内で BindingIdentifier の StringValue が "eval" または "arguments" であると SyntaxError である (13.1.1)。
-
Strict mode の eval コードは呼び出し元の variable environment 内に変数や関数をインスタンス化できない。代わりに新しい variable environment が作成され、その環境が eval コードの宣言バインディング初期化に使われる (19.2.1)。
-
Strict mode コードで this が評価される場合、その this 値はオブジェクトへ強制変換されない。undefined または null の this 値はグローバルオブジェクトへ変換されず、プリミティブ値はラッパオブジェクトへ変換されない。関数呼び出し(
Function.prototype.apply
や Function.prototype.call
を含む)で渡される this 値は強制変換されない (10.2.1.2, 20.2.3.1, 20.2.3.3)。
-
Strict mode コード内で
delete
演算子が現れ、その UnaryExpression が変数・関数引数・関数名への直接参照である場合 SyntaxError が投げられる (13.5.1.1)。
-
Strict mode コード内で
delete
演算子が現れ、削除対象プロパティが属性 { [[Configurable]]: false } を持つか削除不可能である場合 TypeError が投げられる (13.5.1.2)。
-
Strict mode コードは WithStatement を含めてはならない。そのような文脈での WithStatement 出現は SyntaxError である (14.11.1)。
-
Strict mode コード内で CatchParameter が現れ、その BoundNames が
eval
か arguments
を含むと SyntaxError である (14.15.1)。
-
Strict 関数の FormalParameters に同一 BindingIdentifier が複数回現れると SyntaxError である。Function / Generator / AsyncFunction コンストラクタでそのような関数を作成しようとすると SyntaxError となる (15.2.1, 20.2.1.1.1)。
-
実装は本仕様で定義された範囲を超えて、strict 関数内での関数インスタンスの "caller" または "arguments" という名前のプロパティの意味を拡張してはならない。