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

一元运算符也会把运算子转成数值。


参考:http://javascript.ruanyifeng.com/grammar/conversion.html

results matching ""

    No results matching ""