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 NaN
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方法和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
// 再重写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,
f = new Date;
e f; // 报错
把上面的例子换成Object或者其他类型能得到相应的结果,不过是先调用valueOf,再调用toString。
' '号的神奇功效
数据前有加号‘ ',可以让字符串转化为数字
'1' 1 // 2
's' 2 // NaN
注:第一次,格式不好,纰漏多,欢迎大家拍砖