訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
【構文】 RelationalExpression : ShiftExpression RelationalExpression < ShiftExpression RelationalExpression > ShiftExpression RelationalExpression <= ShiftExpression RelationalExpression >= ShiftExpression RelationalExpression instanceof ShiftExpression RelationalExpression in ShiftExpression RelationalExpressionNoIn : ShiftExpression RelationalExpressionNoIn < ShiftExpression RelationalExpressionNoIn > ShiftExpression RelationalExpressionNoIn <= ShiftExpression RelationalExpressionNoIn >= ShiftExpression RelationalExpressionNoIn instanceof ShiftExpression
[注釈]
"NoIn"変数は、ステートメント(文)内にある演算子内に持つ関係式の中にある演算子内で紛らわしさを回避する為に必要とされます。
[注記:]"NoIn"だけに注釈原文↓自体に in を多用して、こういう風に紛らわしくならないようにという意味がある模様
The "NoIn" variants are needed to avoid confusing the in operator in a relational expression with the in operator in a for statement.
【セマンティクス】 関係演算子を評価した結果は、常にBoolean型であり、2つのオペランド間で保持する演算子によって名づけられた関係かどうかに影響します。 RelationalExpressionNoIn プロダクションは、RelationalExpressionを含む代わりに評価されるRelationalExpressionNoInを含む場合を除き、RelationalExpressionプロダクションと同じ方法で評価されます。
プロダクション
RelationalExpression : RelationalExpression < ShiftExpression
は、次のように評価されます。
1. lref は、 RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、 ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. r は、抽象関係比較 lval < rval ( 11.8.5 参照)を実行した結果とする 6. r が、undefinedである場合、falseを返す、それ以外は、r を返す
プロダクション
RelationalExpression : RelationalExpression > ShiftExpression
は、次のように評価されます。
1. lref は、 RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、 ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. r は、falseと同等の LeftFirst を伴う抽象関係比較 rval < lval ( 11.8.5 参照)を実行した結果とする 6. r が、undefinedである場合、falseを返す、それ以外は、r を返す
プロダクション
RelationalExpression : RelationalExpression <= ShiftExpression
は、次のように評価されます。
1. lref は、 RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、 ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. r は、falseと同等の LeftFirst を伴う抽象関係比較 rval < lval ( 11.8.5 参照)を実行した結果とする 6. r が、trueまたはundefinedである場合、falseを返す、それ以外は、r を返す
プロダクション
RelationalExpression : RelationalExpression >= ShiftExpression
は、次のように評価されます。
1. lref は、 RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、 ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. r は、抽象関係比較 lval < rval ( 11.8.5 参照)を実行した結果とする 6. r が、trueまたはundefinedである場合、falseを返す、それ以外は、true を返す
値 x と y から成る比較 x < y は、(少なくとも1つのオペランドがNaNを示す場合に)true、false、undefinedを生成します。 x と y について追記するとアルゴリズムは、パラメータとして LeftFirst という名のBooleanフラグを取ります。 当該フラグは、 x と y 上で実行される視覚的な副作用を潜在的に伴う操作において順番をコントロールする為に使用されます。 ECMAScriptは、式を左から右へ評価する仕様なのでそれが必要となります。 LeftFirst の既定値は、trueであり、 y パラメータの一致する式の左に現れる式と一致する x パラメータを示します。 LeftFirst が、falseである場合、逆が、そのケースであり、操作は、x の前の y 上で実行されなければいけません。そのような比較は次のように実行されます。
1. LeftFirst フラグが、trueである場合、 a. px は、 ToPrimitive(x, hint Number) を呼んだ結果とする b. py は、 ToPrimitive(y, hint Number) を呼んだ結果とする 2.それ以外の場合、評価の順は、左から右への評価に優先して逆にさせる必要がある a. py は、 ToPrimitive(y, hint Number) を呼んだ結果とする b. px は、 ToPrimitive(x, hint Number) を呼んだ結果とする 3. Type(px) がStringで且つ Type(py) がStringというケースではない場合、 a. nx は、 ToNumber(px) を呼んだ結果とする 理由はプリミティブ(原始的)な値である px と py の評価順は、重要ではない為 b. ny は、 ToNumber(py) を呼んだ結果とする c. nx が、NaNである場合、undefinedを返す d. ny が、NaNである場合、undefinedを返す e. nx と ny が、同一のNumber値である場合、falseを返す f. nx が、 +0 且つ ny が、 -0である場合、falseを返す g. nx が、 -0 且つ ny が、 +0である場合、falseを返す h. nx が、+∞である場合、falseを返す i. ny が、+∞である場合、trueを返す j. nx が、-∞である場合、falseを返す k. ny が、-∞である場合、trueを返す l. nx という数学的な値が、ny という数学的な値よりも小さい場合、(注記としてそれら数学的な値が共に無限大且つ共にゼロでない場合)、trueを返し、それ以外はfalseを返す 4.それ以外の場合、 px と py は、共に文字列であり、 a. py が、 px の接頭辞である場合、falseを返す ( q が、 p と他のString値 r を連結した結果となることが可能な場合、String値 p は、String値 q の接頭辞である。注釈として一部のStringは、 r がカラのString値に成り得る為、それ自身の接頭辞である。) b. px が、 py の接頭辞である場合、trueを返す c. k は、 py 内の位置 k にある文字とは異なる px 内の位置 k にある文字のように最小の非負の整数とする (何れかのStringが他方の接頭辞である為、このように1つの k にしなければならない) d. m は、 px 内の位置 k にある文字におけるコードユニット値である整数とする e. n は、 py 内の位置 k にある文字におけるコードユニット値である整数とする f. m < n である場合、trueを返し、そうではない場合、falseを返す
[注釈 1] ステップ 3 は、その使用や代替等々といった意味では、加算演算子 + ( 11.6.1 )におけるアルゴリズム内のステップ 7 とは異なります。 [注釈 2] 複数のStringの比較には、コードユニット値の並びにおける単純な辞書順を使用します。 Unicode仕様上で定義した、より複雑な文字や文字列の同一性、照合順といったセマンティックス的な指向の定義を使用する為に試すことは何もありません。 それゆえにUnicode標準規格による正規の等価性のあるString値は、等しくないものとしてテストすることが可能です。 このアルゴリズムの効果において、正規形の中に両方のString値が既にあることを前提としています。 また、補完文字を含む文字列についての追記として UTF-16 コードユニット値の並びにおける辞書順は、コードポイント値の並びにおける辞書順とは異なります。
プロダクション
RelationalExpression: RelationalExpression instanceof ShiftExpression
は、次のように評価されます。
1. lref は、RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. Type(rval) が、Objectではない場合、TypeError例外を投げる(スローする) 6. rval が、 [[HasInstance]] 内部メソッドを持たない場合、TypeError例外を投げる(スローする) 7.引数 lval を伴う rval の[[HasInstance]]内部メソッドを呼んだ結果を返す
プロダクション
RelationalExpression : RelationalExpression in ShiftExpression
は、次のように評価されます。
1. lref は、RelationalExpressionを評価した結果とする 2. lval は、 GetValue(lref) とする 3. rref は、ShiftExpressionを評価した結果とする 4. rval は、 GetValue(rref) とする 5. Type(rval) が、Objectではない場合、TypeError例外を投げる(スローする) 6.引数 ToString(lval) を伴う rval の[[HasProperty]]内部メソッドを呼んだ結果を返す