视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript中的数算介绍_javascript技巧
2020-11-27 21:31:07 责编:小采
文档


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

下载本文
显示全文
专题