JavaScript中的数学运算介绍


Posted in Javascript onDecember 29, 2014

JavaScript中,数学运算可藉由两种操作来实现:

1.+、-、*、/、%等操作符。
2.使用Math对象的计算函数。比如,用Math.pow(2,3)来计算2的3次方。

与Java不同,JavaScript中的数学运算不会抛出任何错误。计算结果的溢出、除以0、对负数进行开方这些操作都是合法的,其结果为JavaScript中的特殊值:正负Infinity(无限)、正负0、NaN(非数):

1.正负Infinity。当计算结果比JavaScript所能表示的最大数(Number.MAX_VALUE)还要大时,结果为正Infinity;当计算结果比JavaScript所能表示的最小数(-Number.MAX_VALUE)还要小时,结果为负Infinity。与Infinity相关的+、-、*、/等数学运算均遵循高等数学中关于极限计算的规则。1/0的结果为正Infinity,-1/0的结果则为负Infinity。

2.正负0。当计算结果为正,但小于JavaScript所能表示的最小小数(Number.MIN_VALUE)时,结果为正0;当计算结果为负,但大于JavaScript所能表示的最大负小数(-Number.MIN_VALUE)时,结果为负0。一般情况下,开发人员不需要关心正负0之间的区别。

3.NaN。对于某些即使用正负Infinity也无法表示的特殊计算结果,JavaScript使用NaN来表示(值得注意的是,虽然NaN的字面意思是“非数”,但其类型却是number)。这些特殊计算包括:

1).0/0。
2).Infinity/Infinity。
3).对负数进行开方。
4).对非数值的字符串进行数值转换操作。

对于Infinity和NaN,它们既是“无限”和“非数”的打印结果,同时也是JavaScript中表示这两个特殊值的全局变量名。事实上,在ECMAScript 3中,这两个全局变量还可以被赋以其它值;ECMAScript 5中对这一令人抓狂的规则进行了修正,使得这两个全局变量为只读。除了直接访问Infinity变量和NaN变量,还可以通过访问Number对象的成员变量来使用这两个特殊值:

1.Infinity与Number.POSITIVE_INFINITY是等价的。
2.-Infinity与Number.NEGATIVE_INFINITY是等价的。
3.NaN与Number.NaN是等价的。

在JavaScript中,NaN是一个很有趣的特殊值,它有一个特殊属性:与其它任何值(包括自身)都不相等。判定某个值是否为NaN可以有两个方法:

1.对于变量x,判定x!=x是否为true。此表达式仅当x为NaN时为true。

2.对于变量x,调用JavaScript中的全局函数isNaN(),判定isNaN(x)是否为true。用该方法判定NaN其实并不严谨,因为在4种情况下表达式isNaN(x)均为true:

1).x为NaN。
2).x为字符串,且该字符串不是数字。
3).x为对象。
4).x为undefined。

除了isNaN(),JavaScript还有另外一个有用的全局函数:isFinite()。对于变量a,isFinite(a)在以下几种情况下为true:

1).a为number,但不为NaN或正负Infinity。
2).a为字符串,但该字符串的内容为非NaN、非正负Infinity的数字。
3).a为null。
4).a为boolean值。

由于null、undefined等非数值类型会对结果产生影响,因此个人认为最好在使用isNaN()或isFinite()之前判断参数的类型。

实验

//Test Infinity

var a = Number.MAX_VALUE;

console.log(a*1.1);//Infinity

console.log(a*-1.1);//-Infinity

console.log(1/0);//Infinity

console.log(-1/0);//-Infinity
//Test positive/negative 0

var b = Number.MIN_VALUE;

console.log(b/2);//0

console.log(-b/2);//0
//Test NaN

console.log(0/0);//NaN

console.log(Infinity/Infinity);//NaN

console.log(Math.sqrt(-1));//NaN

console.log(parseInt("string"));//NaN
//Test Infinity comparison

console.log(Infinity === Number.POSITIVE_INFINITY);//true

console.log(-Infinity === Number.NEGATIVE_INFINITY);//true
//Test NaN comparison

console.log(NaN === NaN);//false
//Test isNaN()

console.log(isNaN(NaN));//true

console.log(isNaN("42"));//false

console.log(isNaN("string"));//true

console.log(isNaN({}));//true

console.log(isNaN(undefined));//true

console.log(isNaN(null));//false
//Test isFinite()

console.log(isFinite(42));//true

console.log(isFinite(Infinity));//false

console.log(isFinite(NaN));//false

console.log(isFinite("29"));//true

console.log(isFinite("string"));//false

console.log(isFinite(null));//true

console.log(isFinite(undefined));//false

console.log(isFinite(true));//true

console.log(isFinite(false));//true
Javascript 相关文章推荐
JS判断当前日期是否大于某个日期的实现代码
Sep 02 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 Javascript
js精准的倒计时函数分享
Jun 29 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
js date 格式化
Feb 15 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
vue实现微信获取用户信息的方法
Mar 21 Javascript
微信小程序3D轮播实现代码
Sep 19 Javascript
vue完美实现el-table列宽自适应
May 08 Vue.js
jQuery中:lt选择器用法实例
Dec 29 #Javascript
JavaScript中的数值范围介绍
Dec 29 #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
You might like
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python判断字符串与大小写转换
2015/06/08 Python
python实现红包裂变算法
2016/02/16 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python使用tkinter实现简单计算器
2018/01/30 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
如何使用python代码操作git代码
2020/02/29 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
百年校庆节目主持词
2014/03/27 职场文书
《画家乡》教学反思
2014/04/22 职场文书
环保建议书300字
2014/05/14 职场文书
资产运营委托书范本
2014/10/16 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers
Python如何加载模型并查看网络
2022/07/15 Python