What exactly the “LeftFirst” Boolean Flag is in “Abstract Relational Comparison Algorithm” in ECMAScript?

孤者浪人 提交于 2020-05-14 08:59:06

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!