JavaScript 是一种动态类型语言,变量没有类型限制,可以随时赋予任意值
var x = y ? 1 : 'a';
上面代码中,变量x到底是数值还是字符串,取决于另一个变量y的值。y为true时,x是一个数值;y为false时,x是一个字符串。这意味着,x的类型没法在编译阶段就知道,必须等到运行时才能知道
'4' - '3' // 1
1.显式转换
强制转换主要指使用Number()、String()和Boolean()
三个函数,手动将各种类型的值,分别转换成数字、字符串或者布尔值
1.1Number()
使用Number函数,可以将任意类型的值转化成数值
// 数值:转换后还是原来的值
Number(324) // 324
// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324
// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN
// 空字符串转为0
Number('') // 0
// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0
// undefined:转成 NaN
Number(undefined) // NaN
// null:转成0
Number(null) // 0
1.2String()
String
函数可以将任意类型的值转化成字符串
- 数值:转为相应的字符串。
- 字符串:转换后还是原来的值。
- 布尔值:true转为字符串
"true"
,false转为字符串"false"
。 undefined
:转为字符串"undefined"
。-
1.3Boolean()
Boolean
函数可以将任意类型的值转为布尔值
它的转换规则相对简单:除了以下五个值的转换结果为false
,其他的值全部为true
。 undefined
null
0
(包含-0和+0)NaN
-
2.隐式转换
2.1隐式转换成布尔值
JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用
Boolean()
函数
因此除了以下五个值,其他都是自动转为true
。 undefined
null
+0或-0
NaN
''
(空字符串)2.2隐式转换成字符串
字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串2.3隐式转换成数值
JavaScript 遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number()
函数