为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2021-08-26 14:36:03
当我阅读抽象关系比较算法部分中的 EcmaScript 规范时,有关于“LeftFirst”参数的信息,并且规范说评估顺序不是重要的原始类型而是重要的对象类型。任何人都可以解释我首先评估的对象有什么区别?http://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5 Ecmascript Spesification(又名 ecma-internation.org)第 11.8.5 节(抽象关系比较算法)
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

抽象关系比较算法对 求值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 < yLeftFirst = false按从规格上面的报价。相反,如果它使用相同的算法,但使用LeftFirst = true,那么它最终会在调用 ToPrimitive onx之前调用 ToPrimitive on y,这将导致x在 之前记录y


查看完整回答
反对 回复 2021-08-26
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信