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 25 Javascript
IE Firefox 使用自定义标签的区别
Oct 15 Javascript
基于jquery的划词搜索实现(备忘)
Sep 14 Javascript
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 Javascript
深入浅析knockout源码分析之订阅
Jul 12 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
Vue.js实例方法之生命周期详解
Jul 03 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
详解vue-cli3多环境打包配置
Mar 28 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
浅析PHP Socket技术
2013/08/02 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
详解json在php中的应用
2018/09/30 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
python 测试实现方法
2008/12/24 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python中函数传参详解
2016/07/03 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Python类的动态绑定实现原理
2020/03/21 Python
《桃林那间小木屋》教学反思
2014/05/01 职场文书
五年级上册复习计划
2015/01/19 职场文书
辩护词范文大全
2015/05/21 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
七年级作文之环保作文
2019/10/17 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android