数值
js的数值具有以下几条特征:
1.不区分整数值和浮点数值。
2.所有数值均用浮点数值表示。
3.采用IEEE-754标准定义的64位浮点数格式表示。(整数在实际操作时(如数组索引),则是基于32位整数)
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
0b111110111 === 503 // true
0o767 === 503 // true
(但在ES6的严格模式下,禁止使用八进制)
浮点数直接量
实数写法:由整数部分、小数点和小数部分组成。
如:3.1415926
(存储时用)指数记数法:在实数部分后跟字母e或E,再跟正负号,在跟一个整型的指数。
如:5.12e12-> 5.12×10^12
1.44E-8 -> 1.44×10^-8
算术运算
运算符:
包括:+、-、*、/、%、**(指数操作符,ES6新增)
溢出(overflow):
当数值运算结果超过了JavaScript能表示的数值上限时发生。
结果为Infinity,若超过了负数范围,则为-Infinity。
基于±Infinity的加、减、乘、除等算术运算结果依然是±Infinity。
Infinity/Infinity=NaN
下溢(underflow):
当运算结果无限接近于零,并比JavaScript能表示的最小值还小时发生。
JavaScript会返回0,若当一个负数发生下溢时,则返回-0。
被零整除:
简单的返回±Infinity,0/0=NaN
二进制浮点数与四舍五入错误
实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数。
当JavaScript使用实数时,常常只是真实值的一个近似表示。
IEEE-754浮点数表示法是一种二进制表示法,可以精确地表示分数。如:1/2、1/8和1/1024等。
但常用的分数都是十进制分数,二进制浮点数并不能精确表示类似0.1这样的简单数值。
如:0.3-0.2 -> 0.09999999999999998
任何使用二进制浮点数的编程语言中都会有这个问题。
建议,尽可能使用大整数进行等比修正以避免该类错误。如:3-2
数值转换
JavaScript提供了3个函数可将非数值转换为数值。
Number( )、parseInt( )和parseFloat( )
Number(false)//如果是Boolean值,true和false值将分别被转换为1和0。
Number(null)//如果是null值,返回0
Number(undefined)//如果是undefined,返回NaN。
Number("011")//如果字符串中只包含数字时,将其转换为十进制数值,忽略前导0
Number("1.1")//如果字符串中包含有效浮点格式,如“1.1”,将其转换为对应的浮点数字,忽略前导0
Number("0xf")//如果字符串中包含有效的十六进制格式,如“0xf”,将其转换为相同大小的十进制数值
Number("")//如果字符串为空,将其转换为0
//如果字