javascript计算不同数据类型如何转换

  JavaScript操作符计算时,2个不同的类型的操作数如何变换类型,及类型转后后的目标值是什么。在js中有5种基础类型数据:string、number、boolean、null、undefined,其中,常用于计算或者比较的类型是前面三种。

 

  

javascript基础数据之间的转换

JavaScript其它类型转化数字
原始数据类型 目标类型Number
undefined NaN
null 0
false 0
true 1
数字串 相应的数字
不能转化的字符串 NaN
JavaScript其它类型转化为字符串
原始数据类型 目标类型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 


来源:http://www.jb51.net/article/46753.htm

评论(0)网络
阅读(101)喜欢(0)不喜欢(0)JavaScript/Ajax