JavaScript的对象转为原始值

对象到字符串(object-to-string)和对象到数字(object-to-number)的转换是通过调用待转换对象的一个方法来完成的。

所有的对象都继承了两个转换的方法。第一个是toString(),它的作用是返回一个反映该对象的字符串。

许多类都定义了toString()的方法,都有其各自的实现。


另一个转换对象的函数式valueOf()。这个方法并未详细定义:如果存在任意的原始值,它就默认将对象转换为表示它的原始值。

但是对象常常是复合值,而大多数的对象并无法表示为一个原始值,因此默认的valueOf()方法简单的返回对象自身,而不是返回原始值。

JavaScript中对象到字符串经历了如下步骤:

  • 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为字符串,并返回这个字符串的结果。
  • 如果对象没有toString()方法,或者这个方法不返回一个原始值,则会调用valueOf()方法。
  • 否则,JavaScript无法从toString()或valueOf()获得原始值,因此此时将他抛出一个类型错误的异常。
从对象到数字的转换过程,JavaScript做了同样的事情,只是它会先调用valueOf()方法。

从上图可以看出,+会自动的发生类类型转换,[]会转换为0,而只含一个数字的表会转换一个字符串。同样+、==、>、<等关系用算符都会进行特殊的转换,
将对象转为原始值,而不是其他的运算符的方法执行对象到数字的转换。

注意对于Date(),使用对象到字符串的转换模式,通过valueOf()或toString()返回的原始值将直接使用,而不会被强制转换为数字或字符串。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值