这是由语言定义的吗?是否有定义的最大值?不同的浏览器有区别吗?

推荐答案

JavaScript有两种数字类型:NumberBigInt.

最常用的数字类型Number是64位浮点数IEEE 754.

这种类型的最大精确积分值为Number.MAX_SAFE_INTEGER,即:

  • 253-1,或
  • +/-9007199254740991,或
  • 玖亿肆仟柒兆壹佰玖仟玖佰贰亿伍仟肆佰柒拾肆万玖佰玖拾壹

正确地说:一千万亿字节就是PB(或1000TB).

在这种情况下,"安全"指的是准确表示整数并正确比较它们的能力.

From the spec:

请注意,所有大小为no的正整数和负整数

要安全地使用比这个大的整数,需要使用BigInt,它没有上限.

请注意,按位运算符和移位运算符对32位整数进行运算,因此在这种情况下,最大安全整数为231-1,或2147483647.

const log = console.log
var x = 9007199254740992
var y = -x
log(x == x + 1) // true !
log(y == y - 1) // also true !

// Arithmetic operators work, but bitwise/shifts only operate on int32:
log(x / 2)      // 4503599627370496
log(x >> 1)     // 0
log(x | 1)      // 1


关于数字9007199254740992主题的技术说明:该值有一个精确的IEEE-754表示,您可以从变量中分配和读取该值,因此对于小于或等于该值的整数域中的very carefully个选定应用程序,您可以将其视为最大值.

在一般情况下,必须将此IEEE-754值视为不精确值,因为它对逻辑值9007199254740992或9007199254740993进行编码是不明确的.

Javascript相关问答推荐

Codemirsor 6语言包的使用部分是什么?

为什么新的Promises会在不需要的情况下被用来等待?

Python类实现的JavaScript吊坠是什么样子的?

Flutter:显示PDF和视频,但阻止下载

如何使用Paged.js仅渲染特定页面

如何保持子画布元素的1:1宽高比?

如何访问react路由v6加载器函数中的查询参数/搜索参数

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

如何使用侧边滚动按钮具体滚动每4个格?

使用axios.获取实时服务器时的404响应

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

GrapeJS -如何保存和加载自定义页面

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

如何让npx在windows中运行js脚本?

Angular 订阅部分相互依赖并返回数组多个异步Http调用

如何在ASP.NET JavaScript中使用Google Charts API仅对绘制为负方向的条形图移动堆叠条形图标签位置

Reaction组件在本应被设置隐藏时仍显示

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

AddEventListner,按键事件不工作

如果NetSuite中为空,则限制筛选