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 相关文章推荐
JavaScript 使用技巧精萃(.net html
Apr 25 Javascript
js 多浏览器分别判断代码
Apr 01 Javascript
Javascript倒计时代码
Aug 12 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
js简单实现标签云效果实例
Aug 06 Javascript
js自定义回调函数
Dec 13 Javascript
关于vue-router路径计算问题
May 10 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
vue-cli中安装方法(图文详细步骤)
Dec 12 Javascript
vue实现百度语音合成的实例讲解
Oct 14 Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 Javascript
JS中箭头函数与this的写法和理解
Jan 14 Javascript
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
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php简单中奖算法(实例)
2017/08/15 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
js异或加解密效果代码
2008/06/25 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
javascript数组的使用
2013/03/28 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
JS实现点击掉落特效
2021/01/29 Javascript
Python探索之自定义实现线程池
2017/10/27 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
用Python实现读写锁的示例代码
2018/11/05 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
用python写PDF转换器的实现
2020/10/29 Python
"引用"与指针的区别是什么
2016/09/07 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
布达拉宫的导游词
2015/02/02 职场文书
聘任证明怎么写
2015/03/02 职场文书
干部培训工作总结2015
2015/05/25 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle