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 相关文章推荐
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
document.onreadystatechange事件的用法分析
Oct 17 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
js怎么覆盖原有方法实现重写
Sep 04 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
Jan 19 Javascript
Vue基于NUXT的SSR详解
Oct 24 Javascript
jQuery中内容过滤器简单用法示例
Mar 31 jQuery
node版本管理工具n包使用教程详解
Nov 09 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 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递归调用与静态变量使用
2012/12/16 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python正则表达式的使用
2017/06/12 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
python 模拟登陆163邮箱
2020/12/15 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
研究生自我鉴定范文
2013/10/30 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
空气的环保标语
2014/06/12 职场文书
股东合作协议书
2014/09/12 职场文书
建筑横幅标语
2014/10/09 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
2015年国庆节寄语
2015/08/17 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
pandas数值排序的实现实例
2021/07/25 Python