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 学习笔记(六)浏览器类型及版本信息检测代码
Apr 08 Javascript
js兼容的placeholder属性详解
Aug 18 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
深入了解JavaScript中的Symbol的使用方法
Jul 28 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
JavaScript代码性能优化总结篇
May 15 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
canvas简单快速的实现知乎登录页背景效果
May 08 Javascript
js实现鼠标拖曳效果
Dec 30 Javascript
vue路由实现登录拦截
Mar 24 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
SONY SRF-40W电路分析
2021/03/02 无线电
mysql 搜索之简单应用
2007/04/27 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
python 域名分析工具实现代码
2009/07/15 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
跳蚤市场口号
2014/06/13 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年财政工作总结
2014/12/10 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书