1.3 类型转换
自动类型转换
值 | 转换为字符串 | 数字 | 布尔值 | 对象 |
---|---|---|---|---|
undefined | “undefined” | NAN | false | throws TypeError |
null | “null” | 0 | false | throws TypeError |
true | “true” | 1 | new Boolean(true) | |
false | "false" | 0 | new Booleam(false) | |
"" | 0 | false | new String("") | |
"1.2" | 1.2 | true | new String("1.2") | |
"one" | NAN | true | new String(“one”) | |
0 | "0" | false | new Number(0) | |
-0 | "-0" | false | new Number(0) | |
NAN | "NAN" | false | new Number(NAN) | |
Infinity | "Infinity" | true | new Number(Infinity) | |
-Infinity | “-Infinity” | true | new Number(-Infinity) | |
1(无穷大,非零) | “1” | true | new Number(1) | |
{}(任意对象) | 参照说明1 | true | ||
[](任意数组) | “” | 0 | true | |
[9](一个数字的数组) | "9" | 9 | true | |
['a'](其他非数字数组) | 使用join()方法 | NAN | true | |
function(){}(任意函数) | 参照说明2 | NAN | true |
说明1:{}对象两个方法,用于将对象转换为字符串;
Object.prototype.valueOf() 方法返回指定对象的原始值。
Object.prototype.toString() 方法返回一个表示该对象的字符串。
自动转换为布尔值
当JavaScript遇到预期为布尔值的地方(比如if
语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean
函数。
因此除了以下六个值,其他都是自动转为true
。
undefined
null
-0
0或+0
NaN
''(空字符串)
自动转换为字符串
当JavaScript遇到预期为字符串的地方,就会将非字符串的数据自动转为字符串。系统内部会自动调用String
函数。
'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + [] // "5"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
var obj = {
width: '100'
};
obj.width + 20 // "10020"
自动转换为数值
当JavaScript遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number
函数。除了加法运算符有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
一元运算符也会把运算子转成数值。