JavaScript中的数值范围介绍


Posted in Javascript onDecember 29, 2014

JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaScript中所有的数都是浮点数。遵循IEEE 754标准(浮点数算术标准),JavaScript所能表示的数值范围为正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方,这两个边界值可以分别通过访问Number对象的MAX_VALUE属性和MIN_VALUE属性来获取。

对于整数,根据ECMAScript标准的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。值得注意的是,对于整数的位运算(比如移位等操作),JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。

实验

显示JavaScript的最大数的绝对值、最小小数的绝对值:

console.log(Number.MAX_VALUE);

console.log(Number.MIN_VALUE);

显示结果为1.7976931348623157e+308和5e-324。

对正负2的53次方范围以外的整数,JavaScript无法给出精确的计算结果:

var a = 9007199254740992;

console.log(a+3);

正确的运算结果应该是9007199254740995,但JavaScript给出的计算结果却是9007199254740996。尝试改变计算公式后可以发现,只要整数大于9007199254740992,这种计算结果的错误将频繁出现。如果说计算精度的偏差尚可接受的话,那么下面这个例子的后果就更严重了:

var MAX_INT = 9007199254740992;

for (var i = MAX_INT; i < MAX_INT + 2; ++i) {

  // infinite loop

}

由于计算精度问题,上面的for语句将陷入死循环。

对于位运算,JavaScript仅支持32位整型数:

var smallInt = 256;

var bigInt = 2200000000;

console.log(smallInt / 2);

console.log(smallInt >> 1);

console.log(bigInt / 2);

console.log(bigInt >> 1);

可以看到,对于32位以内的整数(256),JavaScript可以进行正确的位运算,所得结果与除法运算的结果一致(128)。而对于32位以外的整数,JavaScript可以进行正确的除法运算(1100000000),但进行位运算后所得结果却与正确结果相去甚远(-1047483648)。

Javascript 相关文章推荐
jquery 选择器引擎sizzle浅析
Feb 06 Javascript
from 表单提交返回值用post或者是get方法实现
Aug 21 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
p5.js绘制创意自画像
Nov 04 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
Nov 03 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 Javascript
JavaScript常用小技巧小结
Dec 29 #Javascript
jQuery中:gt选择器用法实例
Dec 29 #Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 #Javascript
JavaScript中的值类型详细介绍
Dec 29 #Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 #Javascript
JavaScript中的console.assert()函数介绍
Dec 29 #Javascript
jQuery中:eq()选择器用法实例
Dec 29 #Javascript
You might like
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
js实现图片实时时钟
2020/01/15 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
python 循环数据赋值实例
2019/12/02 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
军训学生自我鉴定
2014/02/12 职场文书
出差报告格式模板
2014/11/06 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
公务员个人年终总结
2015/02/12 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL