1.总结html
toString( ):返回对象的字符串表示。
valueOf( ):返回对象的字符串、数值或布尔值表示。web
这两个方法通常是交由JS去隐式调用,以知足不一样的运算状况。
在数值运算里,会优先调用valueOf(),在字符串运算里,会优先调用toString()。正则表达式
2.toString()方法segmentfault
下面进行举例说明(undefined和null没有这两个方法):数组
// toString()方法
//先看看toString()方法的结果
var a = 3;
var b = '3';
var c = true;
var d = {test:'123',example:123}
var e = function(){console.log('example');}
var f = ['test','example'];
a.toString();// "3"
b.toString();// "3"
c.toString();// "true"
d.toString();// "[object Object]"
e.toString();// "function (){console.log('example');}"
f.toString();// "test,example"
3.valueOf()方法svg
若是对象存在任意原始值,它就默认将对象转换为表示它的原始值,若是对象是复合值,并且大多数对象没法真正表示为一个原始值,所以默认的valueOf( )方法简单地返回对象自己,而不是返回一个原始值。函数
数组、函数、和正则表达式简单的继承了这个默认方法,调用这些类型的实例的valueOf( )方法只是简答返回对象自己。3d
日期类定义的valueOf( )方法会返回它的一个内部表示:1970年1月1日以来的毫秒数。code
原始值:不可变动的值,包括undefined、null、布尔值、数字、和字符串。xml
//再看看valueOf()方法的结果
var a = 3;
var b = '3';
var c = true;
var d = {test:'123',example:123}
var e = function(){console.log('example');}
var f = ['test','example'];
a.valueOf();// 3
b.valueOf();// "3"
c.valueOf();// true
d.valueOf();// {test:'123',example:123}
e.valueOf();// function(){console.log('example');}
f.valueOf();// ['test','example']
[1,2].valueOf(); //=> [1,2]
(function (){}).valueOf(); //=> function (){}
/\d/.valueOf(); //=> /\d/
new Date().valueOf(); //=> 1502941383029
很清楚了,toString( )就是将其余东西用字符串表示,比较特殊的地方就是,表示对象的时候,变成"[object Object]",表示数组的时候,就变成数组内容以逗号链接的字符串,至关于Array.join(’,’)。 而valueOf( )就返回它自身了。
好了,咱们如今已经了解toString( )方法 和 valueOf( )方法了,下来咱们来讲说,对象到字符串和对象到数字的转换。
4.对象到字符串的转换:
一、若是对象具备toString( )方法,则调用这个方法。若是她返回一个原始值,JavaScript将这个值转换为字符串(若是自己不是字符串的话),并返回这个字符串结果。
二、若是对象没有toString( )方法,或者这个方法并不返回一个原始值,那么JavaScript会调用valueOf( )方法。若是存在这个方法,则JavaScript调用它。若是返回值是原始值,JavaScript将这个值转换为字符串(若是自己不是字符串的话),并返回这个字符串结果。
三、不然,JavaScript没法从toString()或者valueOf( )得到一个原始值,所以这时它将抛出一个类型错误异常。
5.对象到数字的转换:
一、若是对象具备valueOf( )方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(若是须要的话)并返回这个数字。
二、不然,若是对象具备toString( )方法,后者返回一个原始值,则JavaScript将其转化并返回。
三、不然,JavaScript抛出一个类型错误异常。
因此这就解释了,为何空数组会被转换为数字0,为何具备单个元素的数组一样会转换成一个数字。
数组继承了默认的valueOf( )方法,这个方法返回一个对象而不是一个原始值,所以,数组到数字的转换则调用toString( )方法。空数组转换为空字符串,空字符串转换为数字0。含有一个元素的数组转换为字符串的结果和这个元素转换字符串的结果同样。若是数组只包含一个数字元素,这个数字转换为字符串,再转换回数字。
JavaScript中的"+“运算符能够进行数学加法和字符串链接操做。若是它的其中一个操做数是对象,则JavaScript将使用特殊的方法将对象转换为原始值,而不是使用其余算术运算符的方法执行对象到数字的转换,”= ="相等运算符与此相似。若是将对象和一个原始值比较,则转换将会遵守对象到原始值的转换方式进行。
“+” 和 "= ="应用的对象到原始值的转换包含日期对象的一种特殊情形。日期类是JavaScript语言核心中惟一的预先定义类型,它定义了有意义的向字符串和数字类型的转换。
对于全部非日期的对象来讲,对象到原始值的转换基本上是对象到数字的转换(首先调用valueOf( )),日期对象则使用对象到字符串的转换模式,然而,这里的转换和上文讲述的并不彻底一致:经过valueOf( )或者toString( )返回的原始值将被直接使用,而不会被强制转换为数字或字符串。
和"= =“同样,”
6.总结
Valueof()小结:
1)undefined和null没有此方法(基本类型确定没有方法,String、Number和Boolean是由于有对应的基本包装类型,才能够调用方法);
2)基本包装类型和对应的基本类型,调用valueOf()返回对应的基本类型值;
3)对象类型(除Date类型)返回原对象;
4)Date类型返回表示日期的毫秒数
toString()小结:
1)undefined和null没有此方法(基本类型确定没有方法,String、Number和Boolean是由于有对应的基本包装类型,才能够调用方法);
2)Date类型返回表示时间的字符串;
3)Object类型返回字符串“[object Object]”。
Valueof()和toString()对比:
1)toString()和valueOf()的主要不一样点在于,toString()返回的是字符串,而valueOf()返回的是原对象
2)因为undefined和null不是对象,因此它们toString()和valueOf()两个方法都没有
3)数值Number类型的toString()方法能够接收转换基数,返回不一样进制的字符串形式的数值;而valueOf()方法没法接受转换基数
4)时间Date类型的toString()方法返回的表示时间的字符串表示;而valueOf()方法返回的是如今到1970年1月1日00:00:00的数值类型的毫秒数
5)包装对象的valueOf()方法返回该包装对象对应的原始值
toString和转型函数String()函数的对比:
toString()和String()都是将数据转换为对应的字符串,有以下区别:
1)String()能够将任何类型的值转换为字符串,包括undefined和null;
console.log(String(null));//"null"
console.log(String(undefined));//"undefined"
2)String()不能接受数值基数做为参数
本文说了说 toString( )方法 和 valueOf( )方法的基础知识,文中的许多概念是出自JavaScript权威指南一书,你们能够多看看书。