ES6前JS中的原始基本数据类型有Number、String、Boolean、Undefined、Null、Object
其它原始值转Boolean
使用Boolean函数将类型转换成布尔类型,在JavaScript中,只有下面几种情况会被转换为false,其他都会被转换为true
Boolean(false) // false
Boolean() // false
Boolean(-0) // false
Boolean(0) // false
Boolean(undefined) // false
Boolean(null) // false
Boolean(NaN) // false
Boolean("") // false
Boolean在没有参数的情况下默认为false,需要注意的是非空字符串false是为true的
Boolean("false") // true
其它原始值转Number
Number函数试图将类型转换成数字类型,如果参数无法被转换为数字,则返回NaN,
如果不传参数,默认返回0,如果有参数,调用一个底层实现的方法ToNumber(value),
Number(undefined) // NaN
Number(null) // 0
Number(NaN) // NaN
Number(1) // 1
Number(0) // 0
Number(true) // 1
Number(false) // 0
注意的是null转换为0、undefined和NaN转换number都是NaN、传入数字返回与之相等的值
如果传入的是一个字符串,它会试图将其转换为一个整数或浮点数,而且会忽略所有前导0,如果有一个字符不是数字,结果都返回NaN
Number("1.2") // 1.2 浮点数正常转换
Number("-123") // -123 负整数正常转换
Number("0000123") // 123 前导带0整数,去掉前导0
Number("0X11") // 17 0X转换16进制数
Number("123 123") // NaN 数字字符中间出现空格
Number("100a") // NaN 数字字符中间出现字母
鉴于这种沿着的判断,我们一般使用更加灵活的parseInt和parseFloat进行转换
parseInt用来解析整数,parseFloat则可以解析整数和浮点数,parseInt和parseFloat都会跳过任意的前导空格,尽可能解析更多数值字符,并忽略后面的内容,如果第一个非空格字符是非法的数字直接量,则返回NaN
parseInt("3 abc") //3 去除了前导空格及后面的非数字字符
parseFloat("3.14 abc") //3.14
parseInt("-12.34") // -12
parseInt("0XEF") // 转换成对应16进制数239
Number的特点是转换更加严谨,parseInt和parseFloat的特点是更加灵活,对于不同场景应用
其它原始值转字符串String
我们使用String将类型转换成字符串类型,如果String函数没给参数,则返回空字符串,如果有参数,调用ToString(value),这是一个底层实现的方法,并没有直接暴露出来。
具体的转换规则结合例子看
String(undefined) // undefined
String(null) // null
String(false) // false
String(true) // true
String() // 空字符串
String(NaN) // NaN
String(Infinity) // Infinity
String(-Infinity) // Infinity
String(0) // 0
String(-0) // 0
String(1) // 1
String函数的参数是Number类型的时候,有两个特殊的值 -0和 -Infinity,这两个值转换后会丢弃前面的-号,其它数字按原样字符输出