欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
  • 字符串:
  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

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

相关标签: 类型转换