JavaScript 语言精粹:类型转换

JavaScript 期望使用一个比如布尔值的时候,会对数值进行转换,真值会被当成 true,假值会被当成 false。其他情况,JavaScript 引擎会根据上下文需要对其进行必要的转换

类型转换

表:JavaScript 类型转换

值转换为:字符串数字布尔值对象
undefined"undefined"NaNfalsethrows TypeError
null"null"0falsethrows TypeError
true"true"1new Boolean(true)
false"false"0new Boolean(false)
""(空字符串)0falsenew String("")
"1.2"(非空,数字)1.2truenew String("1.2")
"one"(非空,非数字)NaNtruenew String("one")
0"0"falsenew Number(0)
-0"0"falsenew Number(-0)
NaN"NaN"falsenew Number(NaN)
Infinity"Infinity"truenew Number(Infinity)
-Infinity"-Infinity"truenew Number(-Infinity)
1(无穷大,非零)"1"truenew Number(1)
{}(任意对象)true
[](任意数组)""0true
[9](1个数字对象)"9"9true
['a'](其他数组)使用 join() 方法NaNtrue
function(){}(任意函数)NaNtrue

是非(真假值)判断

任意 JavaScript 的值都可以转换为布尔值。以下值会被转换为 false :

  • undefined
  • null
  • 0
  • -0
  • NaN
  • "" // 空字符串

所有其他值,包括所有对象(数组)都会被转换成 true

相等比较

相等比较包含隐式转换逻辑,比较运算 x==y, 其中 x 和 y 是值,产生 true 或者 false。这样的比较按如下方式进行:

  1. 若 Type(x) 与 Type(y) 相同, 则

    1. 若 Type(x) 为 Undefined(同为 Undefined), 返回 true。

    2. 若 Type(x) 为 Null(同为 Null), 返回 true。

    3. 若 Type(x) 为 Number, 则

      1. 若 x 为 NaN, 返回 false。
      2. 若 y 为 NaN, 返回 false。
      3. 若 x 与 y 为相等数值, 返回 true。
      4. 若 x 为 +0 且 y 为 −0, 返回 true。
      5. 若 x 为 −0 且 y 为 +0, 返回 true。
      6. 返回 false。
    4. 若 Type(x) 为 String, 则当 x 和 y 为完全相同的字符序列(长度相等且相同字符在相同位置)时返回 true。 否则, 返回 false。

    5. 若 Type(x) 为 Boolean, 当 x 和 y 为同为 true 或者同为 false 时返回 true。 否则, 返回 false。

    6. 当 x 和 y 为引用同一对象时返回 true。否则,返回 false。

  2. 若 x 为 null 且 y 为 undefined, 返回 true。

  3. 若 x 为 undefined 且 y 为 null, 返回 true。

  4. 若 Type(x) 为 Number 且 Type(y) 为 String, 返回比较 x == ToNumber(y) 的结果。

  5. 若 Type(x) 为 String 且 Type(y) 为 Number,返回比较 ToNumber(x) == y 的结果。

  6. 若 Type(x) 为 Boolean, 返回比较 ToNumber(x) == y 的结果。

  7. 若 Type(y) 为 Boolean, 返回比较 x == ToNumber(y) 的结果。

  8. 若 Type(x) 为 String 或 Number,且 Type(y) 为 Object,返回比较 x == ToPrimitive(y) 的结果。

  9. 若 Type(x) 为 Object 且 Type(y) 为 String 或 Number, 返回比较 ToPrimitive(x) == y 的结果。

  10. 返回 false。

晓月风尘 wechat
扫描二维码与我相识
你我共同创造价值,记得支持一下哦~