表示所有对象都继承toString()和valueOf()方法。对象到字符串的转换,对象到数字的转换,都是通过调用待转换的对象来完成的。这两种方法中的一种就完成了。说明toString()方法的作用是返回一个反映这个对象的字符串,很多类都定义了不同版本的toString()。({}.toString());//=>"[对象对象]"[1,2].toString();//=>"1,2"true.toString();//=>"true"newDate(1970,0,1).toString();//=>"ThuJan01197000:00:00GMT+0800(CST)"Error("错误信息").toString();//=>"错误:一条错误信息"(function(x){returnx}).toString();//=>"function(x){returnx}"/\d/.toString();//=>"/\\d/"或"/\d/"不同的浏览器可能返回不同的valueOf()方法,它的作用是:如果对象有任何原始值,它会默认转换对象来表示它如果对象是复合值,并且大多数对象不能真正表示为原始值,则默认的valueOf()方法只是返回对象本身,而不是返回原始值。数组、函数和正则表达式简单地继承自这个默认方法,并且在这些类型的实例上调用valueOf()方法简单地返回对象本身。Date类定义的valueOf()方法返回它的内部表示:自1970年1月1日以来的毫秒数。[1,2].valueOf();//=>[1,2](函数(){}).valueOf();//=>函数(){}/\d/.valueOf();//=>/\d/newDate().valueOf();//=>1502941383029原始值:不可改变的值,包括undefined、null、boolean、number、string。看看下面的图片,它列出了一些基本的类型转换,来自JavaScript的权威指南。好了,我们现在已经了解了toString()方法和valueOf()方法,接下来说说对象到字符串和对象到数字的转换。对象到字符串的转换:1.如果对象有toString()方法,调用这个方法。如果它返回原始值,JavaScript会将值转换为字符串(如果它本身不是字符串)并返回字符串结果。2.如果对象没有toString()方法,或者如果这个方法不返回原始值,JavaScript将调用valueOf()方法。如果此方法存在,JavaScript将调用它。如果返回值是原始值,JavaScript会将值转换为字符串(如果它本身不是字符串)并返回字符串结果。3、否则JavaScript无法从toString()或valueOf()中获取原始值,此时会抛出类型错误异常。对象到数字的转换:1.如果对象具有返回原始值的valueOf()方法,JavaScript会将原始值转换为数字(如果需要)并返回数字。2.否则,如果对象有一个返回原始值的toString()方法,JavaScript会转换它并返回它。3.否则,JavaScript抛出TypeError异常。所以这就解释了为什么一个空数组被转换为数字0,以及为什么只有一个元素的数组也被转换为一个数字。数组继承默认的valueOf()方法,该方法返回一个对象而不是原始值,因此调用toString()方法将数组转换为数字。空数组转换为空字符串,空字符串转换为数字0。将具有一个元素的数组转换为字符串与将该元素转换为字符串产生相同的结果。如果数组仅包含一个数字元素,则该数字将转换为字符串,然后再转换回数字。JavaScript中的“+”运算符可以执行数学加法和字符串连接。如果它的操作数之一是对象,JavaScript将使用一种特殊的方法将对象转换为原始值,而不是像其他算术运算符一样进行对象到数字的转换,类似于“==”等式操作员。如果将对象与原始值进行比较,则转换将跟随对象到原始值的转换。“+”和“==”应用的对象到原始类型的转换包含日期对象的特殊情况。Date类是JavaScript语言核心中唯一定义有意义的字符串和数字类型转换的预定义类型。对于所有非日期对象,对象到原始类型的转换基本上是对象到数字的转换(首先调用valueOf()),日期对象使用对象到字符串的转换模式。不过这里的转换和上面文字说的不太一致:会直接使用valueOf()或toString()返回的原始值,不会强制转换为数字或字符串。与“==”一样,“<”运算符和其他关系运算符也将对象转换为原始值,但日期对象的特殊情况除外:任何对象都会首先尝试调用valueOf(),然后调用toString()。无论生成的原始值是否直接使用,都不会进一步转换为数字或字符串。综上所述,本文讲的是toString()方法和valueOf()方法的基础知识。本文中的很多概念都来自权威的JavaScript指南。你可以读更多的书。如果你看懂了这篇文章,你可以看看下面两篇文章,相信你会知道更多有趣的事情。简单的说!![]==true和[]==true[]==true引起的思考简单的说,通过JS的隐式转换,关键时刻可以保命
