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类型数据参与运算)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
null
+ undefined // 0+NaNnull
+ false
// 0+01 + true
// 1+11 + ‘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数据刚好相反
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 |
//为了便于观察重写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
2
3 |
+‘1‘+1 // 2+‘s‘+2 // NaN |
注:第一次,格式不好,纰漏多,欢迎大家拍砖
原文:http://www.cnblogs.com/m-v-p/p/3546083.html