NaN 是一个 number 类型, 那么它在 js 内部是一个数值吗以及怎么表示的

发布于 2022-09-07 22:08:27 字数 419 浏览 15 评论 0

NaN 在 JS 类似怎么表示的?

typeof NaN === 'number', NaN 是一个 number 类型,那它在 js 中是如其它数值一样是个 64 为浮点数吗?

感觉 NaN 和 0 有些类似

对于数值类型 ~~num 会转化为一个 32 位的整型,如果原值也为一个不大于 2 ** 31 的整型,则会相同

    let num = 0;
    ~num; // -1
    ~~num; // 0
    ~~num === num; // true
    // 再看 NaN
    ~NaN; // -1
    ~~NaN; // 0
    ~~NaN === num

那么 NaN 时候是一个特殊的 0,或者说 0 是有两种状态的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一身仙ぐ女味 2022-09-14 22:08:28

我觉得……别想太多,只是凑巧。

~是按位取反,取反两次当然是本身。

按位取反是这么玩的:

clipboard.png

补码原码就不解释了,基础知识。

为了你这个问题我特地去翻了ECMAScript 1st Edition (ECMA-262)

我们来看这个飘号~.

clipboard.png

可以看到,里面第三个处理步骤,就是要将值通过ToInt32(),这个当然也是有标准实现的:

clipboard.png

这里指出了,在ToInt32的时候,NaN(包括正负无穷Infinity)统一按0处理。
这就是你这个问题的答案

所以同理也可以得到这个:
clipboard.png

旧人哭 2022-09-14 22:08:28

https://www.zhihu.com/questio...
「因此 NaN 一共有(2^52 - 1)* 2个值(乘以 2 是因为有正负)」

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文