Fork me on github

类型转换

显式转换

原始值 / 转换目标 布尔值 字符串 数字
Number 除 0, -0, NaN 都为 true 0 => "0" --
String 除空字符串外都为 true -- NaN / 数字
Boolean -- "true" / "false" true => 1
false => 0
Undefined False "undefined" NaN
null False "null" 0
Symbol True let sym = Symbol(1); => "Symbol(1)" 报错
函数 True function func(){}; => "function func(){}" NaN
数组 True [] => "" ; [1, 2] => "1, 2" 首先将数组转换成字符串, 再将字符串转为数字
对象 True "[object Object]" NaN

隐式类型转换

  1. 算数运算符 (+、-、*、/ 、++、--、%...)
    • '+'作为一个双目运算符: 若 + 存在一个 字符串, 则将另一个值也转为 字符串 来进行字符串拼接。
    • 其他情况下都将参数转换为 数值 类型进行运算
  2. 关系运算符 (>、<、==、!、!= )
    • =、!: 同时比较类型和值。
    • ==、 !=:
      • 只比较值,不比较类型。 引用类型比较引用关系
      • 布尔值数字字符串比较时, 会将本身转换为数字在进行比较
      • NaN 不等于 NaN, Symbol 不等于 Symbol
    • ! : 将其后的变量会表达式转换为 布尔值
    • 字符串比较大小: 会从头开始比较每个字符的 unicode 编码,
    • 其余情况均转为数值类型

结尾小问题:

  1. 结合上面的内容 [] == ![] 的输出结果是什么呢?

  2. 上面有提到 双目运算符, 那么在单目符中 var a = 1; a++ 是否== ++a 呢?

    评论区给你你答案 😀😀

posted @ 2019-09-10 00:05  vanst  阅读(113)  评论(0编辑  收藏  举报