Javascript 不支持 64 位整数,为什么 new Date().getTime() 返回 41 位数字?


let number = new Date().getTime()
// number is 1523546797869
// binary: 10110001010111010011101110011011100101101
// (41 bits)

当我通过 GraphQL 保存它时,我收到一个错误,说它 由于Javascript语言的限制,只能处理32位。

在字段"发票日期"中:预期类型"Int",找到1523546797869:Int 不能表示非 32 位有符号整数值:1523546797869

我的问题是,如果 Javascript 语言限制为 32 位整数,为什么 getTime() 返回一个 41 位的数字?

我也读了这个线程。我觉得有点关系,但不能完全理解精度的事情。

您已经使用提供的链接回答了自己的问题。

此链接: JavaScript 是否支持 64 位整数?这解释了javascript被限制为53位,因为它支持IEEE-754双精度(64位)格式。

这个链接: GraphQL BigInt 它解释了该包的存在,因为 GraphQl 只支持 32 位整数

GraphQL 规范将其 Int 类型限制为 32 位。也许您以前见过此错误:

GraphQLError: Argument "num" has invalid value 9007199254740990.
Expected type "Int", found 9007199254740990.

为什么?64位对于JavaScript的53位限制来说太大了。根据Lee Byron的说法,看到这个问题,52位整数规范会"太奇怪了"。因此,该规范具有 32 位整数,以确保可移植到无法表示 64 位整数的语言。

这些都与返回 41 位Date.prototype.getTime()无关。(顺便说一下)这就是具有毫秒的数字时间戳所需的全部内容。所以我的困惑是"你对什么感到困惑?

最新更新