对象到布尔值的转换非常简单:所有对象(包括数组和函数)都转化为true。
字符串和数字的转换规则只适用于本地对象(native object)。
宿主对象(例如,由web浏览器定义的对象)根据各自的算法转换为数字和字符串。
所有的对象继承了两个转换方法。
第一个是toString()
他的作用反应对象的字符串。例子如下:
({x: 1, y: 2}).toStriong() //=>"[object object]"
很多类定义了toString()
方法列如
数组类(Array class)方法是将每个数组的元素转换为一个字符串,在元素间添加逗号再合成
函数类(Function class)将用户定义的函数转换为Javascirpt源代码字符串
日期类(Date class) 返回一个可读的日期时间类
RegExp类(RegExp class)RegExp对象转换为表示正则表达式直接量的字符串。
代码如下:
[1,2,3].toString() // =>"1,2,3"
(function(x){f(x);}).toString() // =>"funcction(x){ \n f(x); \n}"
/\d+/g.toString() // =>"/\\d+g"
new Date(2010,0,1).toString() // =>"fri jan 01 2010 00:00:00 GMT-0800(PST)"
另一个转换对象函数是valueOf()
对象是复合值,而且大多数无法正常表示一个原始值,因此默认简单的返回对象那本身。例子如下:
var d = new Date(2000, 0, 1); //2010年1月1日
d.valueOf() //=> 12630........
通过刚刚使用的toString() valueOf()
就可以做到对象到字符串的对象到数字的转换了。
javascirpt中对象到字符串的转换经过以下步骤:
- 对象具有
toString()
方法,则调用这个方法。如果返回一个原始值,javascirpt将在这个值转换为字符串。 - 对象没有
toString()
方法,或者这个方法并不返回一个原始值,那么javascirp会调用valueOf()
方法 - 否则javascirpt无法从
toString() valueOf()
获取原始值,因此这是他会抛出一个类型错误异常。
对象到数字的过程,首先使用valueOf()
- 对象具有
valueOf()
方法,返回一个原始值,将这个原始值转换为数字并返回这个数字。 - 否则,javascirpt抛出一个类型错误异常
下面代码展示了日期对象和 “+” “-” “== ” 以及 “>” 的运行结果
var now = new Date(); //创建一个日期对象
typeof(now + 1) //=>"string";“+"将日期转换为字符串
typeof(now - 1) //=>"number": "-"使用对象到数字的转换
now == now.toString() //=>true: 隐式的和显示字符串的转换
now > (now -1) //=>true: ">"将日期转换为数字