JS Number类型的数值转换

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
  • 字符串:
  1. 如果字符串中只包含数字(包括正负号),转换为十进制数值,数值前面有0的会去掉0
  2. 浮点数,转换为相应的浮点数,但是后面小数位只含0的会去掉0
  3. 十六进制格式‘0x’,转换为有效的十进制值(Number()会自动把字符串形式的十进制数和十六进制数都转换为十进制,但是不识别八进制,会被当做十进制数处理。)
  4. 字符串为空或空白符,转换为0
  5. 包含除上述之外的字符,转换为NaN
  • 对象
  1. 先调用对象的valueOf()方法,如果返回原始值类型,则对返回值调用Number()函数,再走一遍上面的流程;若返回的不是原始类型值,则调用toString()方法
  2. 如果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

这两周有点忙,没什么时间深入写,下周开始有时间了,会好好的准备周报哒~~加油

猜你喜欢

转载自blog.csdn.net/u011141492/article/details/88771681