let number = new Date().getTime()
// number is 1523546797869
// binary: 10110001010111010011101110011011100101101
// (41 bits)
当我通过GraphQL保存它时,我收到了一个错误信息 由于Javascript语言限制,只能handle 32 bit。
在字段“invoiceDate”中:预期类型“Int”,找到1523546797869:Int 不能表示非32位有符号整数值:1523546797869
我的问题是,如果Javascript语言限制为32位整数,为什么getTime()返回一个41位的数字?
我也读过this thread。我认为这有点相关,但不能完全理解精确的事情。
答案 0 :(得分:2)
您已使用您提供的链接回答了自己的问题。
此链接:Does JavaScript support 64-bit integers?。这解释了由于它支持IEEE-754双精度(64位)格式,javascript限制为53位。
此链接: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位的整数规范本来就太奇怪了#34;看到这个问题。因此,规范具有32位整数,以确保不能代表64位整数的语言。
这些都与Date.prototype.getTime()
返回41位无关。对于具有毫秒的数字时间戳,所有(顺便说一下)都是如此。所以我的困惑是"你对此感到困惑是什么?"