1.布爾值的隱式轉(zhuǎn)換
1.1 轉(zhuǎn)為false
四種情況:
- undefined, null
- Boolean: false
- Number: -0, +0, NaN
- String: ''
1.2 轉(zhuǎn)為true
其余均轉(zhuǎn)為true
妈橄。
注意:字符串false
,帶有空格的字符串' '
, 字符串‘0’
等情況。只要字符串非空,不管里面是什么畜伐,都轉(zhuǎn)為true
Boolean('false'); // true
Boolean(' '); // true
Boolean('0'); // true
2.字符串的隱式轉(zhuǎn)換
2.1 加運算符
只要其中一個操作數(shù)是字符串,那么它就執(zhí)行連接字符串的操作(而不是加法操作,即使它們是數(shù)字)
var x = '2';
// 數(shù)字1被隱式轉(zhuǎn)換為字符串'1'
console.log(x + 1); // 不是3敷鸦,而是21
console.log(1 + x); // 不是3,而是12
注意: 減運算符可以隱式轉(zhuǎn)換字符串為數(shù)字寝贡。
var y = '3';
// 字符串'3'被隱式轉(zhuǎn)換為數(shù)字3
console.log(y - 1); // 2
console.log(4 - y); // 1
2.2 String()
一些看似是false
的值扒披,如果轉(zhuǎn)換成字符串,卻成了 true
圃泡。
Boolean(undefined) // false
String(undefined) // 'undefined'
Boolean('undefined') // true
3. 對象的隱式轉(zhuǎn)換
在JavaScript中,有兩種類型的值颇蜡,一種是原始值(5個:字符串, 數(shù)字, 布爾值, undefined
, null
), 另一種值是對象( object
)
其中价说,對象可以進(jìn)一步劃分為3種:
原始值的包裝器:
Boolean
,Number
风秤,String
鳖目。很少直接使用。用字面量創(chuàng)建的對象唁情。
-
[]
就是 new Array() -
{}
就是 new Object() -
function() {}
就是 new Function() -
/\s*/
就是 new RegExp("\s*")
- 日期:
new Date("2011-12-24")
補(bǔ)充: 原始類型與包裝類型的相互轉(zhuǎn)換
原始值類型 boolean
,number
以及 string
都有自己對應(yīng)的包裝類型Boolean
, Number
和 String
疑苔。 包裝類型的實例都是對象值。
- 轉(zhuǎn)換為包裝類型:
new String('abc')
- 轉(zhuǎn)換為原始類型:
new String('abc').valueOf()
3.1 將對象轉(zhuǎn)換為數(shù)字_(甸鸟?惦费?未理解)
- 調(diào)用
valueOf()
。如果結(jié)果是原始值(不是一個對象)抢韭,則將其轉(zhuǎn)換為一個數(shù)字薪贫。 - 否則,調(diào)用
toString()
方法刻恭。如果結(jié)果是原始值瞧省,則將其轉(zhuǎn)換為一個數(shù)字扯夭。 - 否則,拋出一個類型錯誤鞍匾。
3.2 將對象轉(zhuǎn)換為字符串_(交洗??未理解)
- 調(diào)用
toString()
方法橡淑。如果結(jié)果是原始值构拳,則將其轉(zhuǎn)換為一個數(shù)字。 - 否則梁棠,調(diào)用
valueOf()
置森。如果結(jié)果是原始值(不是一個對象),則將其轉(zhuǎn)換為一個數(shù)字符糊。 - 否則凫海,拋出一個類型錯誤。