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 相关文章推荐
js日期、星座的级联显示代码
Jan 23 Javascript
Jquery节点遍历next与nextAll方法使用示例
Jul 22 Javascript
使用js画图之圆、弧、扇形
Jan 12 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
Oct 30 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
javascript实现unicode与ASCII相互转换的方法
Dec 10 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
纯JS打造网页中checkbox和radio的美化效果
Oct 13 Javascript
javascript学习之json入门
Dec 22 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
Vue实现6位数密码效果
Aug 18 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
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
django框架创建应用操作示例
2019/09/26 Python
django rest framework 自定义返回方式
2020/07/12 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
长青弘远的面试题
2012/06/09 面试题
表决心的诗句大全
2014/03/11 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
教师演讲稿大全
2014/05/16 职场文书
化工专业自荐书
2014/06/16 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
九九重阳节标语
2014/10/07 职场文书
学校师德师风整改方案
2014/10/28 职场文书
齐云山导游词
2015/02/06 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
高考升学宴主持词
2019/06/21 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python