值 | 转换后的类型 | |||
字符串 | 数字 | 布尔值 | 对象 | |
undefined | “undefined” | NaN | false | throws Typerror |
null | “null” | 0 | false | throws Typerror |
true | "true" | 1 | new Boolean(true) | |
false | "false" | 0 | new Boolean(false) | |
""(空字符串) | "" | 0 | false | new String("") |
"3.4" | 3.4 | true | new String("3.4") | |
"one" | NaN | true | new String("one") | |
0 | "0" | false | new Number(0) | |
-0 | "0" | false | new Number(0) | |
NaN | "NaN" | false | new Number(NaN) | |
1 | "1" | true | new Number(1) | |
Infinity | "Infinity" | true | new Number(Infinity) | |
{} | 参考1 | 参考3 | ||
[] | "" | 0 | true | |
[8] | "8" | 8 | true | |
["a"] | "a" | NaN | true | |
function(){} | 参考2 | true | ||
根据如上表格,我们可以清晰的看到一个类型转换到另一个类型后的值。
其中:
参考1:对象转换成字符串后的值为"[object Object]"。
控制台输入:1+{}//返回"1[object Object]"
控制台输入:""+{}//返回"[object Object]"
你可以理解为转转成字符串的时候调用了对象的toString()方法。
如果该对象没有toString()方法,那就调valueOf()。
如果连valueOf()方法都没有,则抛出类型错误异常。
参考2:function a(){},转成字符串的时候,返回这个字符串的定义方式.
"function a(){}",
参考3:对象转化成数字
先判断该对象是否有valueOf()方法,有就返回这个方法得到的原始值,再将原始值转化成数字。
如果没有valueOf(),则调用toString()得到的原始值,再将原始值转化成数字。
如果连toString()方法都没有,则抛出类型错误异常。
根据上表,同样可以得出:
1.所以对象转换成原始的布尔值的时候,都是true,
New Boolean(false) 也是返回true,因为它的对象。