遵循以下規(guī)則:
- 如果兩個操作數(shù)都是數(shù)字,直接相加
- 如果兩個操作數(shù)都是字符串,直接執(zhí)行字符串連接
- 如果有一個操作數(shù)是對象的話法精,Date對象直接調(diào)用toString()方法;其他對象先檢查是否有valueof方法,若有痴突,調(diào)用valueof方法搂蜓,返回的值若是原始值,那就返回這個值,否則調(diào)用toString方法辽装。
- 完成對象的轉(zhuǎn)換后帮碰,如果其中一個操作數(shù)是字符串的話,則另一個操作數(shù)也會轉(zhuǎn)換為字符串,然后進(jìn)行字符串的連接操作。否則拾积,兩個操作數(shù)都將轉(zhuǎn)換為數(shù)字(或者NaN),然后進(jìn)行加法操作殉挽。
在 JavaScript 中丰涉,一共有兩種類型的值:
類型 | 值 |
---|---|
原始值(primitives) | undefined、null此再、boolean昔搂、number、string |
對象值(objects) | 除了原始值外输拇,其他的所有值都是對象類型的值摘符,包括數(shù)組(array)和函數(shù)(function)。 |
原始值轉(zhuǎn)換成數(shù)字
參數(shù) | 結(jié)果 |
---|---|
undefined | NaN |
null | +0 |
boolean | true被轉(zhuǎn)換為1,false轉(zhuǎn)換為+0 |
number | 無需轉(zhuǎn)換 |
string | 由字符串解析為數(shù)字策吠。例如逛裤,"324"被轉(zhuǎn)換為324 |
原始值轉(zhuǎn)換為字符串
參數(shù) | 結(jié)果 |
---|---|
undefined | "undefined" |
null | "null" |
boolean | "true" 或者 "false" |
number | 數(shù)字作為字符串。比如猴抹,"1.765" |
string | 無需轉(zhuǎn)換 |
對于+操作符來說带族,兩個操作數(shù)要么都為字符串,要么全部為數(shù)字
console.log(true + 123);
console.log(true + '123');
console.log(new String('1') + 123);
console.log(new Number(12) + 123);
console.log(undefined + '123');
console.log(undefined + 123);
console.log(null + '123');
console.log(null + 123);
//下面模擬了對象的轉(zhuǎn)化過程
var o1 = {
toString: function() {
return 'str';
},
valueOf: function() {
return {}
}
};
console.log(o1 + '');
var o2 = {
toString: function() {
return 'str';
},
valueOf: function() {
return 'valueOf'
}
};
console.log(o2 + '');
結(jié)果是: