算數運算符
JavaScript 共提供10個算術運算符
- 加法運算符:
x + y
- 減法運算符:
x - y
- 乘法運算符:
x * y
- 除法運算符:
x / y
- 指數運算符:
x ** y
- 余數運算符:
x % y
- 自增運算符:
++x
或者x++
- 自減運算符:
--x
或者x--
- 數值運算符:
+x
- 負數值運算符:
-x
加法運算符
1、求兩個數值的和
1 + 1 // 2
2、非數值的相加
true + true // 2
//兩個布爾值相加,布爾值會自動轉化為數值然后再相加
1 + true // 2
3、兩個字符串相加
'a' + 'bc' // "abc"
這時加法運算符會變成連接運算符,返回一個新的字符串,將兩個原字符串連接在一起。
4、字符串和非字符串相加
1 + 'a' // "1a"
false + 'a' // "falsea"
這時非字符串會轉成字符串,再連接在一起。
加法運算符是在運行時決定,到底是執行相加,還是執行連接。運算子的不同,導致了不同的語法行為,這種現象稱為“重載”(overload)
由于從左到右的運算次序,字符串的位置不同會導致不同的結果。
'3' + 4 + 5 // "345"
3 + 4 + '5' // "75"
-減法、除法和乘法運算符,都是將字符串自動轉為數值,然后再運算。
5、對象的相加
- 如果運算子是對象,必須先轉成原始類型的值,然后再相加。
var obj = { p: 1 };
obj + 2 // "[object Object]2"
//對象obj轉成原始類型的值是[object Object],再加2就得到了上面的結果。
余數運算符
- 余數運算符(%)返回前一個運算子被后一個運算子除,所得的余數。
12 % 5 // 2
- 需要注意的是,運算結果的正負號由第一個運算子的正負號決定。
-1 % 2 // -1
1 % -2 // 1
- 自增和自減運算符有一個需要注意的地方,就是放在變量之后,會先返回變量操作前的值,再進行自增/自減操作;放在變量之前,會先進行自增/自減操作,再返回變量操作后的值。
var x = 1;
var y = 1;
x++ // 1
++y // 2
數值運算符,負數值運算符
- 數值運算符(+),只需要一個操作數,可以將任何值轉為數值(與Number函數的作用相同)。
+true // 1
+[] // 0
+{} // NaN
- 負數值運算符(-),得到的值正負相反,連用兩個負數值運算符,等同于數值運算符。
var x = 1;
-x // -1
-(-x) // 1
- 數值運算符號和負數值運算符,都會返回一個新的值,而不會改變原始變量的值。
指數運算符
- 指數運算符(**)完成指數運算,前一個運算子是底數,后一個運算子是指數。
2 ** 4 // 16
- 多個指數運算符連用時,先進行最右邊的計算。
比較運算符
JavaScript 一共提供了8個比較運算符。
-
>
大于運算符 -
<
小于運算符 -
<=
小于或等于運算符 -
>=
大于或等于運算符 -
==
相等運算符 -
===
嚴格相等運算符 -
!=
不相等運算符 -
!==
嚴格不相等運算符
- 比較運算符可以比較各種類型的值,不僅僅是數值。
- 八個比較運算符分成兩類:
1、相等比較
2、非相等比較:
非相等比較算法是先看兩個運算子是否都是字符串,如果是的,就按照字典順序比較(實際上是比較 Unicode 碼點);否則,將兩個運算子都轉成數值,再比較數值的大小。
布爾運算符
- 布爾運算符用于將表達式轉為布爾值,一共包含四個運算符:
1、取反運算符:!
- 用于將布爾值變為相反值,即
true
變成false
,false
變成true
。 - 對于非布爾值,取反運算符會將其轉為布爾值。
- 以下六個值取反后為
true
,其他值都為false
:
undefined
null
false
0
NaN
空字符串('')
- 不管什么類型的值,經過取反運算后,都變成了布爾值。
2、且運算符:&&
- 且運算符(&&)往往用于多個表達式的求值。
- 運算規則是:如果第一個運算子的布爾值為true,則返回第二個運算子的值(注意是值,不是布爾值);如果第一個運算子的布爾值為false,則直接返回第一個運算子的值,且不再對第二個運算子求值。
't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""
- 且運算符可以多個連用,這時返回第一個布爾值為false的表達式的值。如果所有表達式的布爾值都為true,則返回最后一個表達式的值。
true && 'foo' && '' && 4 && 'foo' && true
// ''
//第一個為布爾值為false的表達式是第三個表達式,所以返回''
1 && 2 && 3
// 3
//所有表達式都為true,所以返回最后一個表達式 3
3、或運算符:||
- 或運算符(||)用于多個表達式的求值。
- 運算規則是:如果第一個運算子的布爾值為true,則返回第一個運算子的值,且不再對第二個運算子求值;如果第一個運算子的布爾值為false,則返回第二個運算子的值。
't' || '' // "t"
't' || 'f' // "t"
'' || 'f' // "f"
'' || '' // ""
- 或運算符可以多個連用,這時返回第一個布爾值為true的表達式的值。如果所有表達式都為false,則返回最后一個表達式的值
false || 0 || '' || 4 || 'foo' || true
// 4
false || 0 || ''
// ''
4、三元運算符:?:
- 三元條件運算符由問號(?)和冒號(:)組成,分隔三個表達式
- 是 JavaScript 語言唯一一個需要三個運算子的運算符
- 如果第一個表達式的布爾值為true,則返回第二個表達式的值,否則返回第三個表達式的值。
't' ? 'hello' : 'world' // "hello"
//t的布爾值為true,返回第二個表達式的值
0 ? 'hello' : 'world' // "world"
//0 的布爾值為false,返回第三個表達式的值
三元條件表達式與if...else語句具有同樣表達效果。但if...else是語句,沒有返回值,而三元條件表達式是一個表達式,具有返回值
在需要返回值的場合,只能使用三元條件表達式,而不能使用if..else。例如:
console.log(true ? 'T' : 'F');
上面代碼中,console.log
方法的參數必須是一個表達式,這時就只能使用三元條件表達式。如果要用if...else
語句,就必須改變整個代碼寫法了。
二進制位運算符
-
二進制位運算符用于直接對二進制位進行計算,一共有7個
1.png
此圖來自