gpt4 book ai didi

javascript - 小于或等于运算符: With NaN

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

当我们使用小于或等于运算符时,这是在抽象关系比较算法的幕后工作。例如。

a <= b;

像这样转换为 JavaScript

!(b < a)

EcmaScript Spesification 表示 ( http://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5 ),这表明至少有一个操作数是 NaN 小于 return undefined这就是意思

var a = 1;
var b = "asd"
a < b // b.toNumber() => NaN and this is operation return undefined (false)

如果我们这样使用

var a = 1;
var b = "asd"
a <= b // this convert to !(b < a) and (b<a) return undefined
// and !(undefined) must be true

但是 EcmaScript 规范说这是返回 false。这对我来说很有趣,这是什么原因?

最佳答案

虽然 <= 确实使用了抽象关系比较算法,a <= b不等于 !(b < a) 。相当于b < a !== false ? false : true (其中 < 表示抽象关系比较算法,而不是 JavaScript < 运算符,它永远无法计算为 undefined ),其行为与 !(b < a) 相同当b < a是真实的还是准确的false ,但当 b < a 时表现不同总的来说是假的。如果b < a计算结果为 undefined ,整个表达式将计算为 false .

这是在规范第 6 步中定义的:https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.3

  1. Let r be the result of performing abstract relational comparison rval < lval with LeftFirst equal to false.
  2. If r is true or undefined, return false. Otherwise, return true.

抽象关系比较算法只能计算为 true , false ,或undefined ;因此第 6 步中的“否则”只能在 r 时适用。是 false ,制作a <= b相当于b < a !== false ? false : true (同样,其中 < 代表抽象关系比较算法)。

关于javascript - 小于或等于运算符: With NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260084/

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