抽象关系比较算法:为什么评估顺序很重要?

当我阅读抽象关系比较算法部分中的 EcmaScript 规范时,有关于“LeftFirst”参数的信息,并且规范说评估顺序不是重要的原始类型而是重要的对象类型。任何人都可以解释我首先评估的对象有什么区别?

http://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5 Ecmascript Spesification(又名 ecma-internation.org)第 11.8.5 节(抽象关系比较算法)


慕盖茨4494581
浏览 191回答 1
1回答

慕妹3242003

抽象关系比较算法对 求值x < y,但它用于多个运算符 EG x < y、x > y、x >= y,有时通过翻转操作数的顺序。在 的情况下x > y,大于运算符的规范说:令 r 是执行抽象关系比较 rval < lval 且 LeftFirst 等于 false 的结果。LeftFirst 对原语无关紧要,因为当它们被强制为数字进行比较时没有副作用。但是,对于对象可能存在副作用:const x = { valueOf: _ => console.log( 'x' ) };const y = { valueOf: _ => console.log( 'y' ) };y > x;上面的代码记录y然后x。由于它采用了大于运营商,它采用了抽象关系比较算法x < y与LeftFirst = false按从规格上面的报价。相反,如果它使用相同的算法,但使用LeftFirst = true,那么它最终会在调用 ToPrimitive onx之前调用 ToPrimitive on&nbsp;y,这将导致x在 之前记录y。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript