本頁の目次 目次 次頁: 12_Statements 前頁: 10_Execution_Contexts
this
this
キーワードは実行コンテキストの this
値を評価する。
識別子は、セクション 10.1.4 で述べたスコープ規則を使用して評価される。この識別子評価の結果は常に Reference 型の値である。
リテラルはセクション 7.8 に述べるように評価される。
Array 初期化子は、 Array オブジェクトの初期化を記述する式で、リテラル形式で書かれる。それは配列要素をあらわす 0 個以上の式のリストで、それぞれ角括弧 "[ ]" で囲まれる。要素はリテラルである必要はない; それらは Array 初期化子が評価される度に評価される。
配列要素は要素リストの開始、中間、末尾で省略もできる。要素リスト中で AssignmentExpression の先行しないカンマは、欠けた配列要素が Array の長さに寄与し、続く要素のインデックスを増加させる。省略された配列要素は定義されない。
生成規則 ArrayLiteral : [ Elisionopt ] は、次のように評価される:
new
Array()
と同様に、新規に配列を生成する。生成規則 ArrayLiteral : [ ElementList ] は、次のように評価される:
生成規則 ArrayLiteral : [ ElementList , Elisionopt ] は、次のように評価される:
生成規則 ElementList : Elisionopt AssignmentExpression は、次のように評価される:
new
Array()
と同様に、新規に配列を生成する。生成規則 ElementList : ElementList , Elisionopt AssignmentExpression は、次のように評価される:
生成規則 Elision : , は、次のように評価される:
生成規則 Elision : Elision , は、次のように評価される:
オブジェクト初期化子は Object の初期化を記述する式であり、リテラルのような形式で書かれる。プロパティ名とその値の 0 個以上の組のリストを { } で囲む。値はリテラルである必要はない; オブジェクト初期化子が評価される度に、それは評価される。
生成規則 ObjectLiteral : { } は、次のように評価される:
new
Object()
と同様に新規にオブジェクトを生成する。生成規則 ObjectLiteral : { PropertyNameAndValueList } は、次のように評価される:
生成規則 PropertyNameAndValueList : PropertyName : AssignmentExpression は、次のように評価される:
new
Object()
と同様に新規にオブジェクトを生成する。生成規則 PropertyNameAndValueList : PropertyNameAndValueList , PropertyName : AssignmentExpression は、次のように評価される:
生成規則 PropertyName : Identifier は、次のように評価される:
生成規則 PropertyName : StringLiteral は、次のように評価される:
生成規則 PropertyName : NumericLiteral は、次のように評価される:
生成規則 PrimaryExpression : ( Expression ) は、次のように評価される:
NOTE このアルゴリズムは、 Result(1) に GetValue を適用しない。 delete
や typeof
のような演算子に括弧のついた式を適用できるようにすることがこれについての主な動機である。
new
MemberExpression Argumentsnew
NewExpressionドット記法を用いて、プロパティは名前によりアクセスされる:
または括弧記法で:
ドット記法は次の構文的変換で説明される:
の振る舞いは次と同等である。
同様に
の振る舞いは次と同等である。
<identifier-string> のところは Identifier として同じ文字シーケンスを構成する文字列リテラルである。
生成規則 MemberExpression : MemberExpression [ Expression ] は次のように評価される:
生成規則 CallExpression : CallExpression [ Expression ] は全く同じ方法で評価されるが、ステップ 1 では CallExpression が評価される。
生成規則 NewExpression : new
NewExpression は、次のように評価される:
生成規則 MemberExpression : new
MemberExpression Arguments は、次のように評価される:
生成規則 CallExpression : MemberExpression Arguments は、次のように評価される:
生成規則 CallExpression : CallExpression Arguments は全く同様に評価されるが、ステップ 1 では CallExpression が評価される。
NOTE Result(3) が Native ECMAScript オブジェクトならば、 Result(8) はけして Reference 型にはならない。 Host オブジェクト呼び出しが Reference 型の値を返すかどうかは、実装依存である。
引数リストの評価は値による内部的リスト (セクション 8.8) を生成する。
生成規則 Arguments : ( ) は、次のように評価される:
生成規則 Arguments : ( ArgumentList ) は、次のように評価される:
生成規則 ArgumentList : AssignmentExpression は、次のように評価される:
生成規則 ArgumentList : ArgumentList , AssignmentExpression は、次のように評価される:
生成規則 MemberExpression : FunctionExpression は、次のように評価される:
生成規則 PostfixExpression : LeftHandSideExpression [no LineTerminator here] ++ は、次のように評価される:
生成規則 PostfixExpression : LeftHandSideExpression [no LineTerminator here] -- は、次のように評価される:
delete
UnaryExpressionvoid
UnaryExpressiontypeof
UnaryExpression生成規則 UnaryExpression : delete
UnaryExpression は、次のように評価される:
生成規則 UnaryExpression : void
UnaryExpression は、次のように評価される:
生成規則 UnaryExpression : typeof
UnaryExpression は、次のように評価される:
Type | Result |
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Object (native and doesn't implement [[Call]]) | "object" |
Object (native and implements [[Call]]) |
"function" |
Object (host) | Implementation-dependent |
生成規則 UnaryExpression : ++ UnaryExpression は、次のように評価される:
生成規則 UnaryExpression : -- UnaryExpression は、次のように評価される:
単項 + 演算子は項を Number 型に変換する。
生成規則 UnaryExpression : + UnaryExpression は、次のように評価される:
単項 - 演算子は項を Number 型に変換し、反転する。 +0 の否定は -0、 -0 の否定は +0 を生成することに注意。
生成規則 UnaryExpression : - UnaryExpression は、次のように評価される:
生成規則 UnaryExpression : ~ UnaryExpression は、次のように評価される:
生成規則 UnaryExpression : ! UnaryExpression は、次のように評価される:
@ を上に定義される演算子の一つとして、生成規則 MultiplicativeExpression : MultiplicativeExpression @ UnaryExpression は、次のように評価される:
浮動小数点数乗算の結果は、 IEEE 754 倍精度計算規則により決定される:
/ 演算子は乗算を行い、項の商を生成する。左項が被除数で右項が除数である。 ECMAScript は整数除算を行わない。項と除算演算結果の全ては倍精度浮動小数点数である。乗算の結果は、 IEEE 754 算術規定により決定される:
% 演算子は、言外の除算から項の剰余を算出する; 左項が被除数で右項が除数である。
NOTE C および C++ において、剰余演算子は整数項のみを受け付ける; ECMAScript においては、浮動小数点数項も受け付ける。
% 演算子により算出されるような浮動小数点数の剰余演算の結果は、 IEEE 754 で定義される "reminder" 演算と同様ではない。 IEEE 754 "remainder" 演算は、切り捨て除算 (truncating division) からではなく丸め除算 (rounding division) から剰余を算出し、したがってその振る舞いは有用な整数剰余演算子のそれとは類似しない。代わりに ECMAScript 言語は % を浮動小数点数演算上で定義し、 Java 整数剰余演算子のそれに類似する方法で振る舞う; これは C ライブラリ関数 fmod と比較される.
ECMAScript 浮動小数点数剰余演算の結果は、 IEEE 算術の規則で決定される:
加法演算子は、文字列の連結、または数の加法のいずれかを行う。
生成規則 AdditiveExpression : AdditiveExpression + MultiplicativeExpression は、次のように評価される:
NOTE ステップ 5 と 6 における ToPrimitive 呼出しではヒントを提供しない。全ネイティブ ECMAScript オブジェクトは Date オブジェクトを除き、ヒントの欠如をヒント Number が与えられたように扱う; Date オブジェクトは、ヒントの欠如をヒント String が与えられたように扱う。
ホストオブジェクトは、ヒントの欠如を他の方法で扱ってよい。
生成規則 AdditiveExpression : AdditiveExpression - MultiplicativeExpression は、次のように評価される:
数型の 2 個の項に適用されるとき、 + 演算子は加法を行い、項の和を生成する。
- 演算子は減法を行い、 2 個の数項の差を生成する。
加法は可換的演算 (commutative operation) であるが、常に結合的 (associative) ということではない。
加法の結果は、 IEEE 754 倍精度計算規則を使用して決定される:
数型の 2 個の項に適用されるとき、 - 演算子は減法を行い、項の差を生成する; 左項が被減数で、右項が減数である。数項 a と b を与えられると、常に a-b は a+(-b) と同じ結果を生成する。
右項で指定される量により、左項上にビット幅左シフト演算を行う。
生成規則 ShiftExpression : ShiftExpression << AdditiveExpression は、次のように評価される:
右項で指定される量により、左項上に符号を伴うビット幅右シフト演算を行う。
生成規則 ShiftExpression : ShiftExpression >> AdditiveExpression は、次のように評価される:
右項で指定される量により、左項上に 0 を伴うビット幅右シフト演算を行う。
生成規則 ShiftExpression : ShiftExpression >>> AdditiveExpression は、次のように評価される:
instanceof
ShiftExpressionin
ShiftExpressioninstanceof
ShiftExpressionNOTE NoIn 変化形は、for 文の中の in
演算子を含む関係式内の in
演算子の混乱の回避に必要である。
関係演算子の評価の結果は常に Boolean 型であり、演算子に名づけられた関係がその 2 項間に維持されているかどうかを反映する。
RelationalExpressionNoIn 生成規則は RelationalExpression 生成規則と同様に評価されるが、内部の RelationalExpression の代わりに、RelationalExpressionNoIn が評価される。
生成規則 RelationalExpression : RelationalExpression < ShiftExpression は、次のように評価される:
生成規則 RelationalExpression : RelationalExpression > ShiftExpression は、次のように評価される:
生成規則 RelationalExpression : RelationalExpression <= ShiftExpression は、次のように評価される:
生成規則 RelationalExpression : RelationalExpression >= ShiftExpression は、次のように評価される:
x と y を値として、比較 x < y は、 true, false, または undefined を生成する (少なくとも一方の項が NaN であることを示す)。 この比較は次のように実行される:
NOTE 文字列比較は、単純な辞書的序列をコードポイント値のシーケンスの値に用いる。文字や文字列の等価性、および Unicode 仕様 で定義される順序の照合の、これ以上複雑で意味論的に指向した定義を用いる試みはない。それゆえ、 Unicode 標準によって規準的に等しい文字列が不等価と検査されるかもしれない。効果においてこのアルゴリズムは、双方の文字列が既に正規化形式であることを想定する。
生成規則 RelationalExpression: RelationalExpression instanceof
ShiftExpression は、次のように評価される:
生成規則 RelationalExpression : RelationalExpression in
ShiftExpression は、次のように評価される:
等価演算子評価の結果は常に Boolean 型であり、演算子で示される関連性が 2 項間で維持されているかどうかを反映する。
EqualityExpressionNoIn 生成規則は EqualityExpression 生成規則と同様に評価されるが、内部の EqualityExpression と RelationalExpression の代わりに、それぞれ EqualityExpressionNoIn と RelationalExpressionNoIn が評価される。
生成規則 EqualityExpression : EqualityExpression == RelationalExpression は、次のように評価される:
生成規則 EqualityExpression : EqualityExpression != RelationalExpression は、次のように評価される:
x と y を値とする比較 x==y は、 true または false を生成する。次のように比較は実行される:
NOTE 等価の上の定義を与えられる:
"" + a == "" + b で文字列比較を強制できる。
a - 0 == b - 0 で数値比較を強制できる。
!a == !b で真偽比較を強制できる。
等価演算子は次の invariants を維持する:
等価演算子は常に通過 (transitive) ではない。例えば、同じ文字列値をあらわす 2 個の区別される String オブジェクトが存在可能である; それぞれの String オブジェクトは == 演算子によって文字列値が等しいとは考えられるが、 2 個の String オブジェクトは互いに等価にはならな。
文字列比較は、コードポイント値のシーケンスの値に単純な等価検査を使用する。文字や文字列の等価性、および Unicode 2.0 仕様 で定義される順序の照合の、より複雑で意味論的に指向した定義を用いる試みはない。それゆえ、 Unicode 標準によって規準的に等しい文字列が不等価と検査されるかもしれない。効果においてこのアルゴリズムは、双方の文字列が既に正規化形式であることを想定する。
生成規則 EqualityExpression : EqualityExpression === RelationalExpression は、次のように評価される:
生成規則 EqualityExpression : EqualityExpression !== RelationalExpression は、次のように評価される:
x と y を値として、比較 x === y は true または false を生成する。そのような比較は次のように行われる:
@ のところを上の生成規則のビット演算子として、生成規則 A : A @ B は、次のように評価される:
生成規則 LogicalANDExpression : LogicalANDExpression && BitwiseORExpression は、次のように評価される:
生成規則 LogicalORExpression : LogicalORExpression || LogicalANDExpression は、次のように評価される:
LogicalANDExpressionNoIn 生成規則と LogicalORExpressionNoIn 生成規則は、 LogicalANDExpression 生成規則と LogicalORExpression 生成規則と同様に評価されるが、内部の LogicalANDExpression, BitwiseORExpression, LogicalORExpression, の代わりに、それぞれ LogicalANDExpressionNoIn, BitwiseORExpressionNoIn, LogicalORExpressionNoIn が評価される。
NOTE && 演算子、また || 演算子の生成する値が Boolean 型である必要はない。生成される値は常に、 2 個の項式のうちの 1 つの値である。.
生成規則 ConditionalExpression : LogicalORExpression ? AssignmentExpression : AssignmentExpression は、次のように評価される:
ConditionalExpressionNoIn 生成規則は、 ConditionalExpression 生成規則と同様に評価されるが、内部の LogicalORExpression, 1 つ目の AssignmentExpression, 2 つ目の AssignmentExpression, の代わりに、それぞれ LogicalORExpressionNoIn, AssignmentExpression, AssignmentExpressionNoIn が評価される。
NOTE ECMAScript における ConditionalExpression の文法は、 C および JAVA とは若干異なり、 2 つ目の部分式が Expression であることをそれぞれ許可するが、 3 つ目の式が ConditionalExpression であることを制限する。 ECMAScript におけるこの差異は、 代入式がどちらの条件にも左右されることを許可し、混乱と中央式がカンマ式であるようなあまり意味のないケースを考慮しないことを動機としている。
AssignmentExpressionNoIn 生成規則は、 AssignmentExpression と同様に評価されるが、 AssignmentExpression に含まれる ConditionalExpression と AssignmentExpression の代わりに ConditionalExpressionNoIn 及び AssignmentExpressionNoIn がそれぞれ評価される。
生成規則 AssignmentExpression : LeftHandSideExpression = AssignmentExpression は、次のように評価される:
@ のところは上に示した演算子の一つをあらわす生成規則 AssignmentExpression : LeftHandSideExpression @ = AssignmentExpression は、次のように評価される:
生成規則 Expression : Expression , AssignmentExpression は、次のように評価される:
ExpressionNoIn 生成規則は、 Expression 生成規則と同様に評価されるが、 Expression と AssignmentExpression, の代わりに、それぞれ ExpressionNoIn と AssignmentExpressionNoIn が評価される。