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 相关文章推荐
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
jquery实现一个简单好用的弹出框
Sep 26 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
Aug 07 Javascript
jQuery遮罩层实例讲解
May 11 jQuery
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
微信小程序CSS3动画下拉菜单效果
Nov 04 Javascript
vue中jsonp插件的使用方法示例
Sep 10 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
php获取服务器信息的实现代码
2013/02/04 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
JQuery优缺点分析说明
2011/04/10 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
vue实现评论列表功能
2019/10/25 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
Python输出9*9乘法表的方法
2015/05/25 Python
python3处理含有中文的url方法
2018/05/10 Python
python3.7.0的安装步骤
2018/08/27 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python按比例随机切分数据的实现
2019/07/11 Python
python 实现逻辑回归
2020/12/30 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
审计专业自荐信范文
2014/04/21 职场文书
爱国口号
2014/06/19 职场文书
爱护公共设施的标语
2014/06/24 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
高中生军训感言
2015/08/01 职场文书
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python