码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript基础学习之-JavaScript权威指南--3.8.3对象转换成原始值

时间:2015-08-16 13:37:03      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

对象转换成原始值

对象到布尔:比较简单所有对象到布尔都是true,包括包装类new Boolean(false)是一个对象而不是原始值,它将转换为true

 

对象到数字对象到字符串比较复杂一些。注意这里讨论的是本地对象,不包含宿主对象(例如浏览器定义的对象)

 

所有对象继承了两个转换方法。

第一种toString()

  它的作用是返回一个反映这个对象的字符串。默认的toString()方法并不会返回一个有趣的值。

很多类定义了特定版本的toString()方法:

  • 数组的toString()方法将每个数组元素转换为一个字符串,并在元素之间添加逗号合并成结果字符串
  • 函数类的toString()方法返回这个函数的实现定义的表示方式。通常是将用户定义的函数转换为Javascript源代码字符串
  • 日期类toString()返回一个可读的日期和时间字符串。
  • RegExp类toString()将返回RegExp对象转换为表示正则表达式直接量字符串。

例:

1  [1,2,3].toString()//=>”1,2,3”
2 
3   (function(x){f(x);}).toString()//=>” function(x){\nf(x);\n}”
4 
5   /\d+/g.toString()//=>”/\\d+/g”
6 
7  newDate(2010,0,1).toString() //=>”Fri Jan 01 2010 00:00:00 GMT-0800(PST)”
8 
9  

第二种转换对象的函数是valueOf()

对象是复合值,而且大多数对象无法真正表示一个原始值。数组、函数和正则表达式简单地继承了这个默认方法,调用这些类型的实例的valueOf()方法只是简单地返回对象本身。日期类的valueOf方法会返回一个内部表示:1970年1月1日以来的毫秒数如

1 var d = new Date(2010,0,1)
2 
3 d.valueOf() //126332800000

 

 

通常情况下对象是通过toString()和valueOf()方法,就可以做到对象到字符串和对象到数字的转换。但也有特殊场景。后面会提到。

 

对象到字符串的转换:

a.      如果具有toString()方法,则调用这个方法,如果它返回一个原始值,js将其转换为字符串,并返回这个字符结果。原始值到字符串的转换。

b.      如果没有toString()或者这个方法并不返回一个原始值,那么js会去调用valueOf()。如果有调用它,如果返回值是原始值。则将其转换成字符串。

c.      如果没有toString()或valueOf()获得一个原始值,因此会抛出一个类型错误异常。

对象到数值的转换:

a.      如果对象具有valueOf()方法,后者返回一个原始值,则javascript 将这个原始值转换为数字并返回这个数字

b.      否则,如果对象具有toString() 方法,后者返回一个原始值,则js将这个原始值转换返回

c.      否则,js报类型错误。

 对象的转化都是通过函数获得原始值在转化成想要的类型,如果不能获得原始值就报错。

 

如果运算符”+”用作对象的话。则js使用特殊的方式将对象转换成原始值。而不是使用其它算数运行符的方法执行对象到数字的转换,“==”运算符与此类似。如果将对象和一个原始值比较,则转换将会遵照对象到原始值的转换方式进行。

 

“+”和 “==” 应用对象到原始值的转换:基本上是应用对象到数字的转换,先调用valueOf()

日期对象比较特殊它会使用对象到字符串的转换模式。而且这里所说的通过valueOf()和toString()转换的原始值会直接使用,而不会强制转换为数字和字符串。

“<”运算符以及其它关系运算符也会做对象到原始值的转换,但要除去日期对象的特殊情形:任何对象都会先尝试调用valueOf(),然后toString(),不管得到的原始值是否直接使用,它都不会进一步被转换成数字或字符串

“+”,“==”,“!=”是唯一执行这种特殊字符串到原始值转换的方式的运算符

JavaScript基础学习之-JavaScript权威指南--3.8.3对象转换成原始值

标签:

原文地址:http://www.cnblogs.com/x739400043/p/4734043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!