gpt4 book ai didi

javascript - 抽象关系比较算法: Why evaluation order is important?

转载 作者:行者123 更新时间:2023-12-01 00:47:30 25 4
gpt4 key购买 nike

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

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

最佳答案

抽象关系比较算法评估x < y ,但它用于多个运算符,例如x < y , x > y , x >= y ,有时通过翻转操作数的顺序。以x > y为例,spec for the Greater-than operator说:

Let r be the result of performing abstract relational comparison rval < lval with LeftFirst equal to false.

LeftFirst 对于基元来说并不重要,因为当它们被强制为数字进行比较时没有副作用。然而,对于对象来说可能会有副作用:

const x = { valueOf: _ => console.log( 'x' ) };
const y = { valueOf: _ => console.log( 'y' ) };

y > x;

以上代码日志y然后x 。由于它使用大于运算符,因此它使用 x < y 的抽象关系比较算法与 LeftFirst = false根据上述规范的引用。如果相反,它使用相同的算法,但使用 LeftFirst = true ,那么它最终会在 x 上调用 ToPrimitive在 y 上调用 ToPrimitive 之前,这会导致xy 之前记录.

关于javascript - 抽象关系比较算法: Why evaluation order is important?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com