阅读javascript高级程序设计随笔(三)
2.4.5 Number类型
进制的书写:
八进制字面值的第一位必须是0,然后是由0~7的数字组成,如果字面值中的数字超出了范围,那么前导零将被忽略。十六进制字面值的前面两位必须是0x,后面就由(0~9及A~F),字母可以大写,也可以小写。
注意:八进制字面量在严格模式下是无效的,会导致支持的Javascript引擎抛出错误。
浮点数值计算会产生舍入误差。
数值范围:
在超出数值的范围时,如果是正数会转换成Infinity,负数就转换成-Infinity.可以使用isFinite()函数。访问Infinity可以使用Number.MAX_VALUE
或者Number.POSITIVE_INFINITY。访问-Infinity可以使用Number.MIN_VALUE或Number.NEGATIVE_INFINITY。
NaN:
NaN表示非数值。任何数值除以0会返回NaN。
任何涉及NaN的操作都会返回NaN。NaN与任何值都不相等,包括NaN本身。
数值转换:
Number()函数的转换规则如下:
1.如果是Boolean值,true和false将分别被转换为1和0。
2.如果是数字值,只是简单的传人和返回。
3.如果是null值,返回0。
4.如果是undefined,返回NaN。
5.如果是字符串,遵循以下规则:
5.1 如果字符串只包含数字(包括前面带正号或负号),则将其转换为十进制数值,即"1"变成1,"123"变成123,而"011"会变成 11(注意:前导的零被忽略了);
5.2如果字符串中包含有效的浮动格式,如"1.1",则将其转换为对应的浮点数值(注意:前导的零被忽略);
5.3如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
5.4如果字符串是空的(不包含任何字符),则将其转换为0;
5.5如果字符串中包含除上述格式之外的字符,则将其转换为NaN.
6.如果是对象,则调用对象的valueof()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
parseInt()函数
parseInt()函数在转换字符串时,它会忽略字符串前面的空格,直到找到第一个非空格字符串。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。如"123abc"会转换为123。
注意:Number()对空字符返回0,而parseInt()返回的是NaN。
为了区别parseInt在解析上的困惑。在转换为其他进制,会使用两个参数,第一个参数是需要转换的字符串,第二个参数是字符串里面的数据是多少进制的。
例子:
var num1 = parsetInt("10",2); //2(按照二进制解析)
var num1 = parsetInt("10",8); //8(按照二进制解析)
var num1 = parsetInt("10",10); //10(按照二进制解析)
var num1 = parsetInt("10",16); //16(按照二进制解析)