JS Number类型的数值转换
程序员文章站
2024-03-18 21:24:34
...
js有5种基本数据类型: undefined, Null, Boolean,Number, String(, Symbol).还有一种复杂类型数据: Object.
Number()
Number类型采用IEEE 754 64位格式存储,所以jS中的整数和浮点数都是以浮点数表示。浮点型数值占据的内存空间是整数型的两倍,所以JS会不失时机的把浮点数转换为整数。
位操作符不直接操作64位的值,而是先将64位的转换位32位整数,再执行操作,然后将结果转换回64位。
有符号的整数,32位中前31位表示整数值,第32位表示数值符号:0表示正数,1表示负数。
- boolean值,true和false被转换为1和0;
- 数值,不变(会识别十进制/八进制-0开头/十六进制-0x开头)
- null,返回0
- undefined,返回NaN
- 字符串:
- 如果字符串中只包含数字(包括正负号),转换为十进制数值,数值前面有0的会去掉0
- 浮点数,转换为相应的浮点数,但是后面小数位只含0的会去掉0
- 十六进制格式‘0x’,转换为有效的十进制值(Number()会自动把字符串形式的十进制数和十六进制数都转换为十进制,但是不识别八进制,会被当做十进制数处理。)
- 字符串为空或空白符,转换为0
- 包含除上述之外的字符,转换为NaN
- 对象
- 先调用对象的valueOf()方法,如果返回原始值类型,则对返回值调用Number()函数,再走一遍上面的流程;若返回的不是原始类型值,则调用toString()方法
- 如果toString()方法返回原始类型值,就对返回值调用Number()函数;如果返回还是对象就返回NaN。
Number(11) // 11
Number(011) // 9
Number(0x11) // 17
Number(undefined) // NaN
Number(null) // 0
Number(true) // 1
Number(false) // 0
Number(‘1.0’) //1
Number(‘1.00‘) //1
Number('011') //11
Number('0x15') //21
parseInt()
字符串: 将字符串转换为整数,转换时忽略前导空格。第一个字符不是数字字符或负号,返回NaN.(空字符串也是).
若是第一个是数字字符,继续向后解析到非数字字符。
由于es3和es5对于解析八进制字符串有分歧,所以parseInt()第二个参数是转换时的基数(2到36之间),即多少进制。
parseInt('') // NaN
parseInt(' 10px') // 10
parseInt(' -10px') // -10
parseInt('10.5') // 10
//可以识别不同进制的数字,但只能解析十进制字符串,八进制字符串会被当做十进制处理。
parseInt('0x11') // 17
parseInt('070') //70
parseInt(070) //56 八进制
parseInt('0xAF', 16)
=>
parseInt('AF', 16) //175,指定了进制,则可以省掉前缀
//对于会自动转换成科学计数法的数值,会把科学计数法当做字符串处理。
parseInt(1000000000000000000000.5) // 1
// 等同于
parseInt('1e+21') // 1
parseInt(0.0000008) // 8
// 等价于
parseInt('8e-7')) // 8
注:上述倒数两个例子中转换很奇怪,是因为自动转化为科学计数法的缘故。
parseFloat()
parseFloat()方法用于把字符串转换成浮点数,解析时同样会忽略前导空格,从第一个数字开始解析直到遇到无效的浮点值结束。第一个字符不是数字字符或负号,返回NaN.(空字符串也是).
parseFloat('20.30.3') // 20.3
parseFloat('-20.00元') // -20
// 科学计数法表示的数字会自动进行转换,然后再求浮点值
parseFloat('314e-2') // 3.14
parseFloat('0.0314e+2') // 3.14
parseFloat(1000000000000000000000.5) // 1e+21
//可以识别不同进制的数字,但只能解析十进制字符串,八进制字符串会被当做十进制处理。
parseFloat(11) // 11
parseFloat(011) // 9
parseFloat(0x11) // 17
parseFloat('11') // 11
parseFloat('011') // 11
parseFloat('0x11') // 0
注:科学计数法:
科学计数法e或E表示,e后面跟一个整数表示指数。
数值小于1且小数点后有大于等于6个0 或 数值整数位大于等于22位时,js会自动将数值转换为科学计数法。
https://www.html.cn/archives/9318
这两周有点忙,没什么时间深入写,下周开始有时间了,会好好的准备周报哒~~加油
上一篇: 接口的多实现和多继承