赵工的个人空间


网络课堂部分转网页计算部分转编程演练

 网页编程轻松学

首页 > 网络课堂 > 网页编程轻松学 > JavaScript数值计算与操作
JavaScript数值计算与操作
编程语言经常要处理的是数值计算,JavaScript也是如此。JavaScript有数值型数据专用于数值计算,包括整数和浮点数,整数有常用的10进制数,还有程序员经常要用到的八进制和十六进制,分别使用0和0x为这两种数值类型的前缀。浮点数有两种形式,一种是普通带用小数点的浮点数,另外一种则是科学计算中常用的指数形式,如5.34e5、312E-4,字母e/E后面为-324~308之间的整数。
JavaScript中还有几个特殊含义的数值,在数值计算中会遇到,那就是Infinity和-Infinity,分别表示无穷大和负无穷大,比如以0为除数就可能出现这个结果值。还有一个是NaN,表示不是一个数值,在数值计算前或计算后往往需要判断,以免出现错误结果。

1. JavaScript的算术运算符:
JavaScript的运算符与其他语言的算术运算符非常相似,因为是借鉴了通常的用法,所以用起来比较方便,一般并不需要特殊去记忆,一般只需要注意%是用于求整数除法的余数。不过,在使用复杂运算关系时需要注意先后顺序,如果拿不准就要使用圆括号括起来,避免计算顺序错误而出现意料之外的结果。
JavaScript有用于二进制运算的位运算符,包括&、|、^、~、<<、>>、>>>,分别表示位与、位或、位异或、位取反、位左移、位有符号右移、位无符号右移,这些位运算在特殊情况下才会使用,十进制运算时一般用不到。

2.JavaScript的赋值语句:
编程语言中经常会用到变量,也就是存储一个数值或其他类型数据的存储位置。JavaScript是一种弱类型的编程语言,对一个变量,可以赋值为任何数据类型,而且并不需要事先声明就可以使用和赋值,但也因此容易造成一些问题,比如有拼写错误就会认为是一个新的变量,也会因局部变量与全局变量重名而造成问题。因此,在es6规范中加了一些限制,也建议变量使用前先声明,可以不声明类型,而使用const声明一个不变的量(也就是常量),而用let声明一个数值会改变的变量,这样区分使用更容易编写代码和调试。当然,es5中的var仍然可以使用。
对变量赋值也使用=,未赋值的变量初始值为null或undefined。赋值除使用=之外,还有一些运算与赋值组合而形成的赋值运算符,+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=,这样使用主要是减少了书写的代码字符数,功能与对应计算后再赋值是一样的。

3.JavaScript常用数学计算:
JavaScript中除了常用四则运算有对应运算符,其他如指数、对数、三角函数等运算需要使用Math对象的一些方法来实现。常用函数有abs(x)、max(x,y)、min(x,y)、random()、sqrt(x)、pow(x,y)、exp(x)、log(x)、sin(x)、cos(x)、tan(x)、acos(x)、asin(x)、atan(x)、atan2(y,x)等,根据方法名可以比较清楚地看出其含义及用法,不过要注意其中log为自然对数,如果计算常用对数要用到换底公式,而三角函数则要使用弧度。
还有三个用于取整的方法,分别为ceil(x)、floor(x)、round(x),名字也比较直观,ceil原意是天花板,也就是取大于等于x的最小整数;而floor原意是地板,也就是取小于等于x的最大整数,即直接去掉小数部分;剩下一个round就是四舍五入了。
除此之外,Math对象还有几个数学常数,为E、LN2、LN10、LOG2E、LOG10E、PI、SQRT1_2、SQRT2,具体含义可参考页面
而在es6/7中,则增加了几个数学计算方法,使用**表示指数运算,与Math.pow()方法等效。而Math对象则增加了sinh(x)、cosh(x)、tanh(x)、acosh(x)、asinh(x)、atanh(x)、cbrt(x)、clz32(x)、expm1(x)、fround(x)、hypot(...values)、imul(x, y)、log1p(x)、log2(x)、log10(x)、sign(x)、trunc(x),其中包括了双曲函数及反双曲函数的计算方法,还有立方根、几个数值平方和的平方根、以2及以10为底的对数、符号位等等方法,具体可参考页面
需要注意,使用Math对象的对应方法时,需要在方法前加上Math.的前缀,使用Math对象的内置常数时也是如此,比如使用圆周率值用Math.PI,角度换算弧度使用Math.PI/180。

4.数值类型转换:
整数有十进制、二进制、八进制、十六进制等形式,把十进制数转为其他几种进制使用.toString(n)方法,其中n为进制数,如将整数int转换为十六进制数,使用hex=int.toString(16)。也就是除十进制外的其他进制数实际上是以一种字符串形式表示。
而将二进制、八进制、十六进制等等形式的数值,包括浮点数,转换为整数,使用parseInt(x,n)函数,其中n为指定的进制,对浮点数可以省略,如int=parseInt('0xabcd',16)。
也可以把一种以字符串形式表示的数值转为数值,比如页面的输入框,得到的就是一个字符串,如果要参与计算就需要先转换为数值,这时可以使用Number()函数,如n=Number(inputstr),也可以使用n=parseInt(inputstr)。如果输入字符串是含有小数点的,也就是浮点数格式,则需要使用f=parseFloat(inputstr)。
对于+,如果两个操作数都是数值,就会按照数值加法来计算结果,而如果其中一个为字符串,就会按照两个字符串连接来处理,其中进行了自动类型转换。当然,任何一个数值都可以使用.toString()方法显式地转换为字符串。

5.数值的比较:
数值比较使用关系运算符<、<=、>、>=、==、!=、===、!==。注意,比较两个数值是否相等要用两个等号,如果只用一个等号就会变成赋值语句,可能不会提示错误,但逻辑上就不对了,这是初学者经常会犯的错误。而三个等号为严格相等,即类型与数值都相等,!==为严格不等于,如果类型与数值有一个不等就不等。
对于浮点数,进行相等比较需要注意,因为浮点数表示形式可能造成一些舍入误差,看起来应该相等的数值在计算机内部表示时会有稍许偏差,引起错误的比较结果。因此,浮点数比较一般不要用==,而是使用两个值的差值的绝对值小于某个值的方法进行比较,如Math.abs(a-b)<0.0001。
而将多个关系表达式组合,需要使用逻辑运算符&&、||、!,分别表示逻辑与、逻辑或、逻辑非,与其他语言中的用法基本一致。
Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659