訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
【構文】 UnaryExpression : PostfixExpression delete UnaryExpression void UnaryExpression typeof UnaryExpression ++ UnaryExpression -- UnaryExpression + UnaryExpression - UnaryExpression ~ UnaryExpression ! UnaryExpression
プロダクション
UnaryExpression : delete UnaryExpression
は、次のように評価されます。
1. ref は、UnaryExpressionを評価した結果とする 2. Type(ref) がReferenceではない場合、trueを返す 3. IsUnresolvableReference(ref) が、trueである場合、 a. IsStrictReference(ref)が、trueである場合、SyntaxError例外を投げる(スローする) b.それ以外の場合、trueを返す 4. IsPropertyReference(ref) が、trueである場合、 a.引数として GetReferencedName(ref) と IsStrictReference(ref) を渡し、 ToObject(GetBase(ref)) における[[Delete]]内部メソッドを呼んだ結果を返す 5.それ以外の場合、 ref は、環境レコードバインディングへの参照である為、 a. IsStrictReference(ref) が、trueである場合、SyntaxError例外を投げる(スローする) b. bindingsは、 GetBase(ref) とする c.引数として GetReferencedName(ref) を渡し、バインディングの具体的なメソッドDeleteBindingを呼んだ結果を返す
[注釈] delete演算子が、strict(厳格)モードのコード内で現れる場合、そのUnaryExpression(単項式)が、変数、関数の引数、関数名等への直接参照である場合、SyntaxError例外が投げられ(スローされ)ます。 追記するとdelete演算子が、strict(厳格)モードのコード内で現れる場合で且つ、削除されるプロパティが属性 { [[Configurable]]: false } を持つ場合、TypeError例外が投げられ(スローされ)ます。
プロダクション
UnaryExpression : void UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2. GetValue(expr) を呼ぶ 3. undefined を返す
[注釈] GetValueは、観測可能な副作用を持つ場合がある為、その値は使用されませんが、呼ばれなければいけません。
プロダクション
UnaryExpression : typeof UnaryExpression
は、次のように評価されます。
1. val は、UnaryExpressionを評価した結果とする 2. Type(val) がReferenceである場合、 a. IsUnresolvableReference(val) が、trueであれば、"undefined"を返す b. val は、 GetValue(val) とする 3.Table 20による Type(val) によって決まるString型を返す
Table 20 -- typeof 演算子の結果 ------------------------------------------------------------------------------------------------------------------------------------ val の型 結果 ------------------------------------------------------------------------------------------------------------------------------------ Undefined "boolean" Null "object" Number "number" Boolean "boolean" String "string" Object (ネイティブ且つ[[Call]]を実装しない) "object" Object (ネイティブかホストで且つ[[Call]]を実装しない) "function" Object (ホストで且つ[[Call]]を実装しない) "undefined"、"boolean"、"number"、"string"となる場合を除き、実装定義 ------------------------------------------------------------------------------------------------------------------------------------
プロダクション
UnaryExpression : ++ UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2.次の条件が全て true である場合、SyntaxError例外を投げる(スローする) ・ReferenceであるType(expr) が、true ・IsStrictReference(expr) が、true ・Type(GetBase(expr)) が、Environment Record(環境レコード) ・GetReferencedName(expr) が、 "eval" または "arguments" の何れか 3. oldValue は、 ToNumber(GetValue(expr)) とする 4. newValue は、 + 演算子( 11.6.3 参照)であるものとして同様のルールを使って oldValue に1を加えたものを結果とする 5. PutValue(expr, newValue) を呼ぶ 6. newValue を返す
プロダクション
UnaryExpression : -- UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2.次の条件が全て true である場合、SyntaxError例外を投げる(スローする) ・ReferenceであるType(expr) が、true ・IsStrictReference(expr) が、true ・Type(GetBase(expr)) が、環境レコード ・GetReferencedName(expr) が、 "eval" または "arguments" の何れか 3. oldValue は、 ToNumber(GetValue(expr)) とする 4. newValue は、その - 演算子( 11.6.3 参照)と同様のルールを使って oldValue から値 1 を引いた結果とする 5. PutValue(expr, newValue) を呼ぶ 6. newValue を返す
単項 + (加算)演算子は、当該オペランドをNumber型に変換します。 プロダクション
UnaryExpression : + UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2. ToNumber(GetValue(expr)) を返す
単項 - (減算)演算子は、当該オペランドをNumber型に変換し、それを否定します。 注記として+0の否定は-0を生成し、-0の否定は+0を生成します。 プロダクション
UnaryExpression : - UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2. oldValue は、 ToNumber(GetValue(expr)) とする 3. oldValue が、NaNである場合、NaNを返す 4. oldValue を否定したものを結果として返す、つまり、同じ大きさであるNumber型の値を生成するが、符号は反対となるという意味
プロダクション
UnaryExpression : ~ UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2. oldValue は、 ToInt32(GetValue(expr)) とする 3. oldValueにビット単位の補数を適用した結果を返す、その結果は、符号付き 32ビット整数
プロダクション
UnaryExpression : ! UnaryExpression
は、次のように評価されます。
1. expr は、UnaryExpressionを評価した結果とする 2. oldValue は、 ToBoolean(GetValue(expr))とする 3. oldValue が、trueである場合、falseを返す 4. true を返す