一元操作符 +
當(dāng) + 運(yùn)算符作為一元操作符的時(shí)候,相當(dāng)于Number()
console.log(+'1') // 1
當(dāng)輸入的值為對象的時(shí)候蛮寂,執(zhí)行以下幾步邏輯:
- 如果值為基本類型著洼,則直接返回
- 否則,調(diào)用valueOf方法雕憔,如果返回一個(gè)原始值姿骏,則JavaScript將其返回
- 否則,調(diào)用toString方法斤彼,如果返回一個(gè)原始值分瘦,則JavaScript將其返回
- 否則,JavaScript拋出一個(gè)類型錯(cuò)誤異常
console.log(+['1']) // 1
console.log(+['1', '2', '3']) // NaN
console.log(+{}) // NaN
二元操作符 +
Null和數(shù)字
console.log(null + 1) // 1
根據(jù)執(zhí)行邏輯琉苇,null是基本類型執(zhí)行返回嘲玫,1也是基本類型執(zhí)行返回
兩邊都不是字符串,執(zhí)行計(jì)算翁潘,null轉(zhuǎn)換為0趁冈,所以返回1
數(shù)組與數(shù)組
console.log([] + []) // ''
根據(jù)執(zhí)行邏輯,[]返回的是toString結(jié)果拜马,為''渗勘,兩邊都是字符串,執(zhí)行拼接操作俩莽,故返回''
數(shù)組與對象
console.log([] + {}) // '[object, object]'
[]返回的為''旺坠,{}返回的為'[object, object]',兩邊都是字符串扮超,執(zhí)行拼接操作取刃,故返回'[object, object]'
==
==進(jìn)行比較的時(shí)候蹋肮,遵循下面的規(guī)范
- 如果x與y是同一類型
- x是undefined,返回true
- x是Null璧疗,返回true
- x是數(shù)字
- 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是數(shù)字,y是字符串爹谭,判斷x==Number(y)
- x是字符串,y是數(shù)字榛搔,判斷Number(x) == y
- x是布爾值诺凡,判斷Number(x) == y
- y是布爾值,判斷x == Number(y)
- x不是數(shù)字或字符串践惑,y是對象腹泌,y基于上面的規(guī)則進(jìn)行判斷
- x是對象,y不是數(shù)字或字符串尔觉,x基于上面的規(guī)則進(jìn)行判斷
- 返回false