1.布尔值的隐式转换
1.1 转为false
四种情况:
- undefined, null
- Boolean: false
- Number: -0, +0, NaN
- String: ''
1.2 转为true
其余均转为true。
注意:字符串false,带有空格的字符串' ', 字符串‘0’等情况。只要字符串非空,不管里面是什么,都转为true
Boolean('false'); // true
Boolean(' '); // true
Boolean('0'); // true
2.字符串的隐式转换
2.1 加运算符
只要其中一个操作数是字符串,那么它就执行连接字符串的操作(而不是加法操作,即使它们是数字)
var x = '2';
// 数字1被隐式转换为字符串'1'
console.log(x + 1); // 不是3,而是21
console.log(1 + x); // 不是3,而是12
注意: 减运算符可以隐式转换字符串为数字。
var y = '3';
// 字符串'3'被隐式转换为数字3
console.log(y - 1); // 2
console.log(4 - y); // 1
2.2 String()
一些看似是false 的值,如果转换成字符串,却成了 true。
Boolean(undefined) // false
String(undefined) // 'undefined'
Boolean('undefined') // true
3. 对象的隐式转换
在JavaScript中,有两种类型的值,一种是原始值(5个:字符串, 数字, 布尔值, undefined, null), 另一种值是对象( object)
其中,对象可以进一步划分为3种:
原始值的包装器:
Boolean,Number,String。很少直接使用。用字面量创建的对象。
-
[]就是 new Array() -
{}就是 new Object() -
function() {}就是 new Function() -
/\s*/就是 new RegExp("\s*")
- 日期:
new Date("2011-12-24")
补充: 原始类型与包装类型的相互转换
原始值类型 boolean,number 以及 string 都有自己对应的包装类型Boolean, Number 和 String。 包装类型的实例都是对象值。
- 转换为包装类型:
new String('abc') - 转换为原始类型:
new String('abc').valueOf()
3.1 将对象转换为数字_(??未理解)
- 调用
valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。 - 否则,调用
toString()方法。如果结果是原始值,则将其转换为一个数字。 - 否则,抛出一个类型错误。
3.2 将对象转换为字符串_(??未理解)
- 调用
toString()方法。如果结果是原始值,则将其转换为一个数字。 - 否则,调用
valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。 - 否则,抛出一个类型错误。