js中不同類型的基礎資料之間可以轉換,這種轉換是有規則可尋的,並非隨意的隨機的。在js中有5種基礎型別資料:string、number、boolean、null、undefined,其中,常用於計算或比較的型別是前面三種。
基礎資料之間的轉換
其它类型转化数字
原始数据类型 |
目标类型Number |
undefined |
NaN |
null |
0 |
false |
0 |
true |
1 |
数字串 |
相应的数字 |
不能转化的字符串 |
NaN |
其它类型转化为字符串
原始数据类型 |
目标类型String |
undefined |
undefined |
null |
null |
false |
false |
true |
true |
数字 |
数字字符串 |
不同類型的基礎資料之間的加法,資料先轉換為number,然後轉換為string(如果有string型資料參與運算)
null undefined // 0 Na>
null undefined // 0 Na>
null undefined // 0 Na> null false // 0 0
1 true // 1 1
1 '1' //'11';數字與字串相加結果是字串
1 2 '3' //'33';(1 2)的結果然後與'3'相加;這裡要把每一步加法單獨拆開來看,否則變成和下面一樣的結果了.
1 (2 '3') //'123';先運算2 '3',然後1 '23'
's' null //'snull'
' s' undefined // 'sundefined'
's' true //'strue'
1 true undefined 's' // 1 1 NaN 's'=2 NaN 's'= NaN 's'=NaNs
對象參與加減法運算
物件參與基礎類型資料運算,先轉換為基礎型別。先呼叫其valueOf方法,如果傳回的不是基礎類型,再呼叫其toString方法,如果傳回的還不是基礎類型,則拋出錯誤。但是,Date資料剛好相反
程式碼如下:
//為了便於觀察重寫和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法和Date的toString方法valueOf方法
Date.prototype.toString = function(){
return 1;
}
Date.prototype.valueOf = function(){
return 2;
}
var a = new Date,
b = new Date;
a b; // 呼叫toString,1 1,結果是2
a b; // 呼叫toString,1 1,結果是2
// 再重寫toString方法
Date.prototype.toString = function(){
return {};
}
var c = new Date ,
d = new Date;
c d; // 呼叫toString方法回傳的不是基礎型,再呼叫valueOf,2 2,結果是4
//再重寫valueOf方法
Date.prototype.valueOf = function(){
return {};
}
var e = new Date,
}
var e = new Date,
>
e f; // 報錯
把上面的例子換成Object或其他型別能得到對應的結果,不過是先呼叫valueOf,再呼叫toString。
複製程式碼
程式碼如下:
'1' 1 // 2 '1' 1 // 2 '1' 1 > 's' 2 // NaN 註:第一次,格式不好,紕漏多,歡迎大家拍磚