犀牛书3.8.3对象转化为原始值

对象到布尔值的转换非常简单:所有对象(包括数组和函数)都转化为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: ">"将日期转换为数字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值