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, 其中 xy 是值,产生 true 或者 false。这样的比较按如下方式进行:

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

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

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

    3. Type(x)Number, 则

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

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

    6. xy 为引用同一对象时返回 true。否则,返回 false

  2. xnullyundefined, 返回 true

  3. xundefinedynull, 返回 true

  4. Type(x)NumberType(y)String, 返回比较 x == ToNumber(y) 的结果。

  5. Type(x)StringType(y)Number,返回比较 ToNumber(x) == y 的结果。

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

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

  8. Type(x)StringNumber,且 Type(y)Object,返回比较 x == ToPrimitive(y) 的结果。

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

  10. 返回 false

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