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()
无关。(顺便说一下)这就是具有毫秒的数字时间戳所需的全部内容。所以我的困惑是"你对什么感到困惑?