基础数据之间的转换
| 原始数据类型 | 目标类型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
注:第一次,格式不好,纰漏多,欢迎大家拍砖