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()
。如果结果是原始值(不是一个对象),则将其转换为一个数字。 - 否则,抛出一个类型错误。
网友评论