再学JS--数据类型转换之隐式转换

一元操作符 +

当 + 运算符作为一元操作符的时候,相当于Number()

console.log(+'1')  // 1

当输入的值为对象的时候,执行以下几步逻辑:

  1. 如果值为基本类型,则直接返回
  2. 否则,调用valueOf方法,如果返回一个原始值,则JavaScript将其返回
  3. 否则,调用toString方法,如果返回一个原始值,则JavaScript将其返回
  4. 否则,JavaScript抛出一个类型错误异常
console.log(+['1'])  // 1
console.log(+['1', '2', '3'])  // NaN
console.log(+{})  // NaN

二元操作符 +

Null和数字
console.log(null + 1)  // 1

根据执行逻辑,null是基本类型执行返回,1也是基本类型执行返回

两边都不是字符串,执行计算,null转换为0,所以返回1

数组与数组
console.log([] + [])  // ''

根据执行逻辑,[]返回的是toString结果,为'',两边都是字符串,执行拼接操作,故返回''

数组与对象
console.log([] + {})  // '[object, object]'

[]返回的为'',{}返回的为'[object, object]',两边都是字符串,执行拼接操作,故返回'[object, object]'

==

==进行比较的时候,遵循下面的规范

  1. 如果x与y是同一类型
    1. x是undefined,返回true
    2. x是Null,返回true
    3. x是数字
      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. x是字符串,完全相等返回true,否则false
    5. x是布尔值,x和y都是true或者false,返回true,否则返回false
    6. x和y都是指向同一对象,返回true,否则返回false
  2. x是null并y是undefined,返回true
  3. x是undefined并且y是null,返回true
  4. x是数字,y是字符串,判断x==Number(y)
  5. x是字符串,y是数字,判断Number(x) == y
  6. x是布尔值,判断Number(x) == y
  7. y是布尔值,判断x == Number(y)
  8. x不是数字或字符串,y是对象,y基于上面的规则进行判断
  9. x是对象,y不是数字或字符串,x基于上面的规则进行判断
  10. 返回false

你可能感兴趣的:(再学JS--数据类型转换之隐式转换)