第三章 语言基础(二)

92 阅读2分钟

一、类型转换与转型函数

转为数值:Number() parseInt() parseFloat()

转为字符串:String() toString()

转为布尔值:Boolean()

1、转为数值

Number()parseInt()parseFloat()
1111
1.51.511.5
NaNNaNNaNNaN
'12.5'12.51212.5
'aaa12'NaNNaNNaN
'12aaa'NaN1212
'12.5aaa'NaN1212.5
true1NaNNaN
[]0NaNNaN
[1, 2]NaN11
{}NaNNaNNaN
{name: 'jack'}NaNNaNNaN
null0NaNNaN
undefinedNaNNaNNaN

根据上表可以看出一些规律,具体的规则如下:

  • parseInt 和 parseFloat只能转换数值、非空字符串和非空对象,且字符串必须以数字或加减号开头。其他均会返回NaN。
  • parseInt无法识别小数点,因为它不是有效的整数字符,同时,parseInt可以识别不同的进制,建议始终传第二个参数10。
  • parseFloat只解析十进制值,所以首字符0会被忽略,第二个小数点也是无效的。
  • Number()只能识别数字、加减号、0x和小数点,包含其他字符的字符串,或者包含两个小数点的字符串都会转换为NaN。十六进制会转换为十进制。空字符串返回0
  • 对于对象,调用valueOf()或toString()方法再进行转换,因此空数组先toString得到空字符串,进而得到0,而空对象得到'[object Object]',进而得到NaN。

2、转为字符串

String()和toString()都可以进行转换,两者几乎相等,区别就是 null 和 undefined 没有toString方法。因此我们只看String即可。

String()
+1'1'
-1.5'-1.5'
NaN'NaN'
true'true'
false'false'
[]''
[1, 2]'1, 2'
{}'[object Object]'
{name: 'jack'}'[object Object]'
null'null'
undefined'undefined'

由此可见,对数值、布尔值、null、undefined基本上就是在外面加了个引号变成字符串。其中加号会被忽略。对对象依旧是调用valueOf()或toString()方法再进行转换。

3、转为布尔值

Boolean()
0false
+1true
-1.5true
NaNfalse
''false
'aaa'true
'12aaa'true
[]true
[1, 2]true
{}true
{name: 'jack'}true
nullfalse
undefinedfalse

转为布尔值的规则比较简单:

  • 0和NaN转为false,其他数值为true
  • 空字符串为false,其他字符串为true
  • null和undefined都转为false
  • 任意对象都为true

\