类型转换
看下面示例:
console.log(10 + "string"); // 10string; +运算符可以用在数字和字符串。数字10被转换为字符串
console.log("7" * "4"); // 28; *是数值计算,两个字符串都被转换成数字。
console.log(1 - "x"); // NaN; -是数值计算,x转成数值时,转成了NaN,整个表达式结果就是NaN。
var n = 1- "x"; // 同上
console.log(n + "string"); // NaNstring; n转成了字符串
上面运行结果可以看出,我们在进行运算的时候,js为我们自动进行了转换动作。
我们列出一些简单转换(注意红色文字):
值 | 转换为 | ||||
字符串 | 数字 | 布尔值 | 对象 | ||
undefined | "undefined" | NaN | false | throws TypeError | |
null | "null" | 0 | false | throws TypeError | |
true | "true" | 1 | - | new Boolean(true) | |
false | "false" | 0 | - | new Boolean(false) | |
""(空字符串) | - | 0 | false | new String("") | |
"1.2"(非空,数字) | - | 1.2 | true | new String("1.2") | |
"abc"(非空,非数字) | - | NaN | true | new String("abc") | |
0 | "0" | - | false | new Number(0) | |
-0 | "0" | - | false | new Number(-0) | |
NaN | "NaN" | - | false | new Number(NaN) | |
Infinity | "Infinity" | - | true | new Number(Infinity) | |
-Infinity | "-Infinity" | - | true | new Number(-Infinity) | |
1 | "1" | - | true | new Number(1) | |
{}(任意对象) | 后续会说明 | 后续会说明 | true | ||
[](任意无元素数组) | "" | 0 | true | ||
[9](一个数字元素数组) | "9" | 9 | true | ||
['a'](其他数组) | 使用"join"方法 | NaN | true | ||
function() {} (任意函数) | 后续会说明 | NaN | true |
转换和相等性:
看下面示例:
console.log(null == undefined); // true, 这两个值被认为相等
console.log("0" == 0); // true,数字与字符串比较时,将字符串转换为数字,再使用转换后的值进行比较
console.log(0 == false); // true,转成数值比较
console.log("0" == false); // true,转成数值比较
上面虽然都返回true,但是一个值可转换成另一个值,并不意味着两个值相等。
比如,在期望使用布尔值的地方,使用了undefined,他将转换成false,但不意味着 undefined == false,
"=="运算符从不试图将其操作数转换成布尔值。
console.log(false == undefined); // false,在比较相等性之前,不能将 null 和 undefined 转换为其它任何值
此处可以简单了解,后期有专门讲解 "==" 与 "==="。