JavaScript 期望使用一个比如布尔值的时候,会对数值进行转换,真值会被当成 true,假值会被当成 false。其他情况,JavaScript 引擎会根据上下文需要对其进行必要的转换
类型转换
表:JavaScript 类型转换
| 值 | 转换为:字符串 | 数字 | 布尔值 | 对象 |
|---|---|---|---|---|
| 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") | |
| "one"(非空,非数字) | NaN | true | new String("one") | |
| 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](1个数字对象) | "9" | 9 | true | |
| ['a'](其他数组) | 使用 join() 方法 | NaN | true | |
| function(){}(任意函数) | NaN | true |
是非(真假值)判断
任意 JavaScript 的值都可以转换为布尔值。以下值会被转换为 false :
undefinednull0-0NaN""// 空字符串
所有其他值,包括所有对象(数组)都会被转换成 true
相等比较
相等比较包含隐式转换逻辑,比较运算 x==y, 其中 x 和 y 是值,产生 true 或者 false。这样的比较按如下方式进行:
若
Type(x)与Type(y)相同, 则若
Type(x)为Undefined(同为Undefined), 返回true。若
Type(x)为Null(同为Null), 返回true。若
Type(x)为Number, 则- 若
x为NaN, 返回false。 - 若
y为NaN, 返回false。 - 若
x与y为相等数值, 返回true。 - 若
x为+0且y为−0, 返回true。 - 若
x为−0且y为+0, 返回true。 - 返回
false。
- 若
若
Type(x)为String, 则当x和y为完全相同的字符序列(长度相等且相同字符在相同位置)时返回true。 否则, 返回false。若
Type(x)为Boolean, 当x和y为同为true或者同为false时返回true。 否则, 返回false。当
x和y为引用同一对象时返回true。否则,返回false。
若
x为null且y为undefined, 返回true。若
x为undefined且y为null, 返回true。若
Type(x)为Number且Type(y)为String, 返回比较x == ToNumber(y)的结果。若
Type(x)为String且Type(y)为Number,返回比较ToNumber(x) == y的结果。若
Type(x)为Boolean, 返回比较ToNumber(x) == y的结果。若
Type(y)为Boolean, 返回比较x == ToNumber(y)的结果。若
Type(x)为String或Number,且Type(y)为Object,返回比较x == ToPrimitive(y)的结果。若
Type(x)为 Object 且Type(y)为String或Number, 返回比较ToPrimitive(x) == y的结果。返回
false。


