对象到布尔值
所有对象都转换为true,包装对象也适用:new Boolen(false)=>true
对象到字符串
对象到数字
针对本地对象,不包含宿主对象。宿主对象(浏览器定义的对象)
方法:toSring():返回一个反映这个对象的字符串。
[1,2,3].toString()//=>"1,2,3"将每个数组元素转换为一个字符串
(function(x){f(x);}).toString()//=>"fuhnction(x){\nf(x);\n}"//返回这个函数的实现定义的表示方式
new Date(2010,0,1).toString()//=>"Fri Jan 01 2010 00:00:00 GTM-0800"//返回一个可读的日期和时间字符串
方法:valueOf():返回对象本身
数组,函数,正则表达式简单的继承了该方法,调用这些类型的实例的valueOf()方法只简单的返回对象本身
var d=new Date(2010,0,1);//
d.valueOf()//=>从1970.1.1to2010,0,1的毫秒数
特殊情况
对象到字符串
- 如对象具有toString()方法,则调用该方法。如果返回一个原始值,将这个值转化为字符串,并返回字符串结果
- 如对象没有toString()方法,或返回不是一个原始值,调用valueof()方法,如果存在这个方法,则调用
否则js无法从toString()或valueof()获得一个原始值,出现抛出异常
对象到数字
如对象具有valueof()方法,后者返回一个原始值,则js将原始值转换为数字
- 否则,对象有toString()方法,后者返回一个原始值,则js将其转换并返回
否则异常
空数组转换为数字0以及单个元素数组转换为数字
数组继承了valueof()方法,方法返回对象而不是数组,因此调用toString()方法,空数组转换为空字符串,空字符串转换为数字0
+和==运算符的情况
操作数有对象,对象转换为原始值,而不是数字
- 非日期对象
对象到原始值的转换:是对象到数字的转换 - 周期对象
对象到字符串的转换模式
关系运算符比较时
任何对象(除日期对象外) ,任何对象先尝试valueof(),然后toString(),做对象到原始值的变换
+,== ,!=和关系运算符是