问题
Can someone explain what exactly the LeftFirst
Boolean Flag is in Abstract Relational Comparison Algorithm
in ECMAScript
? I know that there is only one operator <
handling all other relational operators like >
, >=
, <=
as mentioned in the ECMAScript specification in Abstract Relational Comparison
using the LeftFirst
Boolean Flag for, and example: when we write and run an operation like 10 > 5
the LeftFirst Boolean Flag
becomes false
, and the left operand 10
is moved to the right side where the operand 5
is, and the right operand 5
is moved to the left side where the operand 10
earlier was, and the >
operator becomes <
operator and at last something like this is executed 5 < 10
, but now my question is: when executing 5 < 10
I must know whether what operand gets evaluated first, is it the operand 5
or is it the operand 10
? I'm asking this because they have not mentioned about this in the ECMAScript
specification in the Abstract Relational Comparison Algorithm.
and I must know why the >=
is executed with LeftFirst
true and why the <=
is executed with LeftFirst
false. Pls help me
回答1:
The input values x
and y
in the algorithm description are expected to be fully evaluated before those steps begin. The flag is so that the operations like ToPrimitive()
happen in the proper order.
For example, x
and y
might be object references. The ToPrimitive()
operation will call either .toString()
or .valueOf()
in order to perform the comparison operation. Either of those functions might have side-effects, so the flag makes sure that the operations in the right order according to what the source code actually looks like.
A "side-effect" is a change to program state that happens in a function call. A toString()
function can change anything that any other function can change: properties of the object, global variables, anything. The rule makes sure that those changes happen in the correct order (left-side changes before right-side changes), no matter what the algorithm does to "flip" the operands.
来源:https://stackoverflow.com/questions/60799820/what-exactly-the-leftfirst-boolean-flag-is-in-abstract-relational-comparison