在 Javascript 裡運算有遞增的寫法 ++
、遞減的寫法 --
var a = 10;
a ++; // a = a + 1
透過 =
把右側的運算式指派(assign)至等號左側的變數 a。
一般比較常用到的四則運算,再來看看 MDN 其他賦值運算子的寫法。
名稱 | 簡化的運算子 | 意義 |
---|---|---|
賦值 | x = y | x = y |
加法賦值 | x += y | x = x + y |
減法賦值 | x -= y | x = x - y |
乘法賦值 | x *= y | x = x * y |
除法賦值 | x /= y | x = x / y |
餘數賦值 | x %= y | x = x % y |
指數賦值 | x **= y | x = x ** y |
左移賦值 | x <<= y | x = x << y |
右移賦值 | x >>= y | x = x >> y |
無號右移賦值 | x >>>= y | x = x >>> y |
位元 AND 賦值 | x &= y | x = x & y |
位元 XOR 賦值 | x ^= y | x = x ^ y |
位元 OR 賦值 | x |= y | x = x | y |
主要功能在分隔運算式循序執行,由左至右並回傳最後一個運算式的值。
如果需要在一個運算式裡同時包含多組運算式,就可用逗號 ,
來分隔。
例如 for 迴圈:
for (i = 0, j = 10; i < 10; i++, j++) {
k = i + j;
}
透過 ,
逗號運算子可以將多組運算式看作是同一個。
或者宣告的時候:
var a = 10;
var b = 10;
可寫成
var a = 10, b =10;
這樣可同時宣告多組變數並給予值。
但要注意的是
var a = b = 10;
是不同的意思,此句拆開來看是
b = 10;
var a = b;
如果不懂正確寫法的含義,會在無意識下寫了一個未宣告的全域變數。
另外發現,在物件、陣列裡也會出現 ,
像曾經在 Day04 物件實字 提到舉的例子,是否也算是逗號運算子?後來經過查找 MDN 的敘述及犀牛的舉例,證明不是。MDN CommaOperator Usage notes
這是 JS 跟其他語言比較不一樣的地方,&&
跟 ||
可以用短路性質來理解,怎麼說呢?他們在判斷的時候會先檢查左邊的數值。
&&:如果左側可被轉成 false,即回傳運算式 1
||:如果左側可被轉成 true,即回傳運算式 1
console.log( 運算式 1 && 運算式 2 );
簡單來說透過 &&
跟 ||
所產生的值不一定會是 Boolean,而是兩者其中之一
var a = 123;
var b = "abc";
var c = null;
var d = undefined;
var e = true;
console.log( a && b ); // "abc",123 被 ToBoolean 轉型 true,故回傳 b
console.log( a || b ); // 123,因為轉成 true 故回傳 a
名稱 | 用法 | 解釋 |
---|---|---|
邏輯 AND (&&) | 運算式1 && 運算式2 | 假如 運算式1 可以被轉換成 false的話,回傳 運算式1; 否則,回傳 運算式2。 因此,&&只有在 兩個運算元都是True 時才會回傳 True,否則回傳 false。 |
邏輯 OR (||) | 運算式1 || 運算式2 | 假如 運算式1 可以被轉換成 true的話,回傳 運算式1; 否則,回傳 運算式2。 因此,||在 兩個運算元有任一個是 True 時就會回傳 True,否則回傳 false。 |
邏輯 NOT (!) | !運算式 | 假如單一個運算元能被轉換成 True 時,回傳 false,不然回傳 true。 |
參考資料:
MDN 運算式與運算子
008 天重新認識 JavaScript
胡立-邏輯運算的小撇步:|| 與 && 的短路性質