一元操作符 +
当 + 运算符作为一元操作符的时候,相当于Number()
console.log(+'1') // 1
当输入的值为对象的时候,执行以下几步逻辑:
- 如果值为基本类型,则直接返回
- 否则,调用valueOf方法,如果返回一个原始值,则JavaScript将其返回
- 否则,调用toString方法,如果返回一个原始值,则JavaScript将其返回
- 否则,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]'
==
==进行比较的时候,遵循下面的规范
- 如果x与y是同一类型
- x是undefined,返回true
- x是Null,返回true
- x是数字
- x是NaN,返回false
- y是NaN,返回false
- x与y相等,返回true
- x是+0,y是-0,返回true
- x是-0,y是+0,返回true
- 返回false
- x是字符串,完全相等返回true,否则false
- x是布尔值,x和y都是true或者false,返回true,否则返回false
- x和y都是指向同一对象,返回true,否则返回false
- x是null并y是undefined,返回true
- x是undefined并且y是null,返回true
- x是数字,y是字符串,判断x==Number(y)
- x是字符串,y是数字,判断Number(x) == y
- x是布尔值,判断Number(x) == y
- y是布尔值,判断x == Number(y)
- x不是数字或字符串,y是对象,y基于上面的规则进行判断
- x是对象,y不是数字或字符串,x基于上面的规则进行判断
- 返回false
网友评论