这是由语言定义的吗?有确定的最大值吗?在不同的浏览器中是否有所不同?
当前回答
要用于位操作的任何值必须在0x80000000(-2147483648或-2^31)和0x7fffffff(2147483647或2^31 - 1)之间。
控制台会告诉您0x80000000等于+2147483648,但是0x80000000 & 0x80000000等于-2147483648。
其他回答
JavaScript有两种数字类型:number和BigInt。
最常用的数字类型是一个64位浮点IEEE 754数字。
这种类型的最大精确整数值是Number。MAX_SAFE_INTEGER,即:
253 - 1 +/- 9,007,199,254,740,991,或 九千亿亿七千亿九千九百零五十四万四千九百九十一
从这个角度来看:1千万亿字节是1拍字节(或1千兆字节)。
在此上下文中,“安全”指的是准确表示整数并正确比较它们的能力。
来自规范:
注意所有大小为no的正整数和负整数 在Number类型中可以表示大于253的 整数0有两种表示,+0和-0)。
为了安全地使用大于此值的整数,您需要使用BigInt,它没有上界。
注意,位操作符和移位操作符作用于32位整数,因此在这种情况下,最大安全整数是231-1,即2,147,483,647。
Const log = console.log Var x = 9007199254740992 Var y = -x Log (x == x + 1) // true ! Log (y == y - 1) //也成立! //算术运算符有效,但位/移位只对int32运算 Log (x / 2) // 4503599627370496 Log (x >> 1) // 0 Log (x | 1) // 1
关于数字9,007,199,254,740,992的技术注意事项:这个值有一个精确的IEEE-754表示,您可以从变量中赋值和读取这个值,因此对于在小于或等于该值的整数领域中非常仔细选择的应用程序,您可以将其视为最大值。
在一般情况下,必须将此IEEE-754值视为不精确值,因为它是对逻辑值9,007,199,254,740,992还是9,007,199,254,740,993进行编码是不明确的。
JavaScript在ECMAScript 2020中收到了一个新的数据类型:BigInt。它引入了带有“n”后缀的数值字面量,并允许任意精度:
var a = 123456789012345678901012345678901n;
当然,当这样大的整数(可能是无意的)被强制转换为数字数据类型时,精度仍然会丢失。
而且,很明显,由于有限的内存,总是会有精度限制,为了分配必要的内存和对如此大的数字执行算术,在时间方面会有成本。
例如,生成一个具有10万个十进制数字的数字,在完成之前会有明显的延迟:
console.log(BigInt("1".padEnd(100000,"0")) + 1n)
...但它确实有效。
>= ES6:
Number.MIN_SAFE_INTEGER;
Number.MAX_SAFE_INTEGER;
< = ES5
参考文献:
Number.MAX_VALUE;
Number.MIN_VALUE;
console.log (MIN_VALUE, Number.MIN_VALUE); console.log (MAX_VALUE, Number.MAX_VALUE); console.log (MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);/ / ES6 console.log (MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);/ / ES6
火狐3似乎不存在庞大数字的问题。
1e+200 * 1e+100将计算到1e+300。
Safari似乎也没有问题。(顺便说一句,如果有人想测试的话,这是在Mac上进行的。)
除非我脑子进水了,否则这比64位整数大得多。
简短的回答是“视情况而定。”
如果你在任何地方使用位操作符(或者如果你引用数组的长度),范围是:
无符号:0…(1 > > > 0)
签名:(-(1 > > > 1)1)……(1 > > > 1)
(恰巧按位操作符和数组的最大长度被限制为32位整数。)
如果你不使用位操作符或使用数组长度:
签名:(-Math pow (2.53)) ... + Math . pow (2.53))
这些限制是由“Number”类型的内部表示施加的,通常对应于IEEE 754双精度浮点表示。(请注意,与典型的有符号整数不同,由于内部表示的特征,负极限的大小与正极限的大小相同,它实际上包括一个负0!)
推荐文章
- 什么时候JavaScript是同步的?
- 为什么Python的无穷散列中有π的数字?
- 如何在Typescript中解析JSON字符串
- Javascript reduce()在对象
- 在angularJS中& vs @和=的区别是什么
- 错误"Uncaught SyntaxError:意外的标记与JSON.parse"
- JavaScript中的querySelector和querySelectorAll vs getElementsByClassName和getElementById
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?