有人可以解释一下ECMAScript
中Abstract Relational Comparison Algorithm
的布尔标志LeftFirst
到底是什么吗?我知道只有一个运算符<
处理所有其他关系运算符,如>
、>=
、<=
如抽象关系比较中的 ECMAScript 规范中所述 使用LeftFirst
布尔标志和示例:当我们编写并运行类似10 > 5
的操作时,LeftFirst Boolean Flag
变得false
,并且左侧操作数10
移动到操作数5
所在的右侧,右侧操作数5
移动到操作数10
之前的左侧,>
运算符成为<
运算符,最后5 < 10
执行这样的事情,但现在我的问题是:在执行5 < 10
时,我必须知道首先评估的操作数是操作数5
还是操作数10
?我问这个是因为他们在抽象关系比较算法的ECMAScript
规范中没有提到这一点。
我必须知道为什么>=
以LeftFirst
真执行,为什么<=
以LeftFirst
假执行。请帮助我
算法描述中x
和y
的输入值应在这些步骤开始之前进行全面评估。该标志是为了使像ToPrimitive()
这样的操作以正确的顺序发生。
例如,x
和y
可能是对象引用。ToPrimitive()
操作将调用.toString()
或.valueOf()
以执行比较操作。这些函数中的任何一个都可能有副作用,因此该标志确保根据源代码的实际外观以正确的顺序进行操作。
"副作用"是在函数调用中发生的程序状态更改。toString()
函数可以更改任何其他函数可以更改的任何内容:对象的属性、全局变量等。该规则确保这些更改以正确的顺序发生(左侧更改在右侧更改之前),无论算法如何"翻转"操作数。