1. 減號肿仑、乘號碎税、除號雷蹂、取模...
這些操作符會嘗試將他們的操作數(shù)轉(zhuǎn)換為數(shù)字(使用Number()
),如果操作數(shù)沒法轉(zhuǎn)換為數(shù)字的話责蝠,他們的結(jié)果就是NaN
。
2. 加號(+)
當(dāng)沒有特別指定的時(shí)候參考(1)齿拂,但有如下幾種例外情況:
- 字符串 + 字符串:進(jìn)行字符串拼接操作署海。
- 字符串 + 其他:將其他轉(zhuǎn)換為字符串医男,并進(jìn)行拼接操作。
加法運(yùn)算會觸發(fā)三種類型轉(zhuǎn)換:將值轉(zhuǎn)換為原始值刀森,轉(zhuǎn)換為數(shù)字研底,轉(zhuǎn)換為字符串飘哨。
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
3. ==琐凭、!=
在條件判斷運(yùn)算 == 中的轉(zhuǎn)換規(guī)則是這樣的:
- 如果比較的兩者中有布爾值(Boolean),會把 Boolean 先轉(zhuǎn)換為對應(yīng)的 Number胚吁,即 0 和 1愁憔,然后進(jìn)行比較吨掌。
- 如果比較的雙方中有一方為 Number膜宋,一方為 String時(shí),會把 String 通過 Number() 方法轉(zhuǎn)換為數(shù)字秋茫,然后進(jìn)行比較肛著。
- 如果比較的雙方中有一方為 Boolean跺讯,一方為 String時(shí)刀脏,會將雙方轉(zhuǎn)換為數(shù)字愈污,然后再進(jìn)行比較聪建。
- 如果比較的雙方中有一方為 Number金麸,一方為Object時(shí)挥下,則會調(diào)用 valueOf 方法將Object轉(zhuǎn)換為數(shù)字棚瘟,然后進(jìn)行比較偎蘸。對象在轉(zhuǎn)換基本類型時(shí)迷雪,首先會調(diào)用 valueOf 然后調(diào)用 toString。并且這兩個方法你是可以重寫的章咧。
這兩個運(yùn)算符在大部分上面都是與(1)相同的赁严,不同的是:
- 字符串 op 字符串:不會進(jìn)行類型轉(zhuǎn)換粉铐,直接比較疼约。
- 對象 op 對象:引用都指向同一個對象才為true。
在條件判斷時(shí)蝙泼,除了 undefined忆谓, null, false踱承, NaN倡缠, '' 哨免, 0, -0昙沦,其他所有值都轉(zhuǎn)為 true琢唾,包括所有對象
建議在所有使用條件判斷的時(shí)候都使用全等運(yùn)算符 ===
來進(jìn)行條件判斷。全等運(yùn)算符會先進(jìn)行數(shù)據(jù)類型判斷盾饮,并且不會發(fā)生隱式類型轉(zhuǎn)換采桃。
4. 大于、小于普办、大于等于呈础、小于等于
同(一)沙廉,但是對于兩個操作數(shù)均是字符串的時(shí)候&無法轉(zhuǎn)換時(shí)的返回值會有不同。
當(dāng)兩個操作數(shù)均是字符串的時(shí)候,它會執(zhí)行大家熟悉的字符串比較,即從左到右依次比較每一個字符的ASCII碼果元,若出現(xiàn)符合操作符的情況,則返回true,否則返回false颤专。
無法將操作數(shù)轉(zhuǎn)換為數(shù)字的情況下總是返回false。