gpt4 book ai didi

javascript - 按位非 NaN : why does ToInt32 convert NaN to zero?

转载 作者:行者123 更新时间:2023-11-29 10:26:13 30 4
gpt4 key购买 nike

我通常使用双位非运算 (~~) 作为 Math.floor 的替代方法。最近我发现,当与NaN一起使用时,它会返回0:

console.log(~~NaN)

经过一些调查,我发现,根据 ECMAScript 2015 specs ,按位 NOT 在内部使用 ToInt32...

Let oldValue be ToInt32(GetValue(expr)).

... 其中,by its turn :

If number is NaN, +0, −0, +∞, or −∞, return +0.

这解释了我的代码片段中的序列:~~NaN --> ~~0 --> ~-1 --> 0。但是,对我来说,0 似乎是 NaN 的奇怪选择。

我的问题:为什么规范选择 0 作为 ToInt32(NaN) 的返回值?可以说“因为 NaN 是假的”,但 +∞ 或 −∞ 不是这种情况。我最好寻找一些记录在案的 ECMA 解释(因此不会基于意见)。

最佳答案

NaN 通常是一个 float 概念,而不是整数。 (与负零和无穷大相同。JavaScript 数字是 IEEE float 。)ToInt32 仅生成从 −2**31 到 2**31−1 的整数,就像您希望在大多数情况下看到的 32 位整数类型一样其他语言。

关于javascript - 按位非 NaN : why does ToInt32 convert NaN to zero?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636167/

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