JavaScript的对象转为原始值

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

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

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

JavaScript的对象转为原始值_第1张图片

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

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

JavaScript的对象转为原始值_第2张图片

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

  • 如果对象具有toString()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为字符串,并返回这个字符串的结果。
  • 如果对象没有toString()方法,或者这个方法不返回一个原始值,则会调用valueOf()方法。
  • 否则,JavaScript无法从toString()或valueOf()获得原始值,因此此时将他抛出一个类型错误的异常。
从对象到数字的转换过程,JavaScript做了同样的事情,只是它会先调用valueOf()方法。
JavaScript的对象转为原始值_第3张图片
从上图可以看出,+会自动的发生类类型转换,[]会转换为0,而只含一个数字的表会转换一个字符串。同样+、==、>、<等关系用算符都会进行特殊的转换,
将对象转为原始值,而不是其他的运算符的方法执行对象到数字的转换。
JavaScript的对象转为原始值_第4张图片
注意对于Date(),使用对象到字符串的转换模式,通过valueOf()或toString()返回的原始值将直接使用,而不会被强制转换为数字或字符串。
JavaScript的对象转为原始值_第5张图片


你可能感兴趣的:(JavaScript的对象转为原始值)