上一篇介紹了變數與型別,在一些範例當中,其實已經運用到了運算式與運算子,那他們究竟是什麼呢?今天就來瞭解它們吧!
首先,我們直接來看下面這一行:
var a = 1 + 2;
上面宣告了一個變數a,並且指派1 + 1 的值給它。在 = 號的右側也就是 1+2
就是運算式,而 + 就是運算子。其實,我們從小就學過的四則運算「加、減、乘、除」都是屬於運算子的一種。
完整翻譯一下就是,在運算式中,我提供了兩個運算元也就是1、2,交給運算子+來運算並且會得到一個值,也就是3,然後指派給變數a。
再來,從運算子和運算元的關係,JavaScript 的運算子,有所謂的一元 (unary) 運算子、二元 (binary) 運算子和三元 (ternary) 運算子。
一個一元運算子,顧名思義需要一個運算元,可以放在前面或是後面:
x++
++x
以此類推,二元運算子需要兩個運算元:
2 + 2
x + y
至於三元運算子我們再之後會提到。相信看到這裡,沒有學過程式的人,看到一元運算子的 ++
應該會有些疑問,其實除了基本的「加、減、乘、除」,還有許多運算子,大致上可以分為下列幾種:
今天先來介紹算術運算子。
算術運算子應該是程式語言中最為常見的一種,也是最為單純。但JavaSCript中,它卻沒有那麼單純。
加號(+)
一般我們要做數字的加號運算,沒有什麼太大的問題。
var a = 5 + 3;
console.log(a) //8
這是最為單純的情況,但如果加號左右兩邊其中一邊是字串結果就會不一樣了。我們直接來看範例:
50 + "30" // "5030"
100 + "ruby" // "100ruby"
undefined + "123" // "undefined123"
NaN + "000" // "NaN000"
null + "123" // "null123"
在加號運算中,如果其中一方是字串,另一端會被「自動轉型」為字串後,連接在一起。
還有幾個特殊的情況:
123 + null // 123
100 + true // 101
// true 經過 Number() 轉型成數字後,會變成 1
100 + false // 100
// false 經過 Number() 轉型成數字後,會變成 0
123 + undefined // NaN
null 和 undefined 和數字相加會嘗試轉型成數字,null 、false會變成 0 ,true會變成 1, undefined 則是NaN。
再來,如果你嘗試進行數字加法與字串加法混搭的運算式:
var num1 = 100;
var num2 = 50;
var str = "100加上50是" + num1 + num2;
console.log(str);
// 結果會是 "100加上50是10050"
為什麼會產生這結果呢?原因在於這裡的運算式計算是「由左而右」。所以,前面的字串會先與 num1 相加,得到的會是字串"100加上50是100",再把結果與 num2 做相加,最後得到"100加上50是10050"。如果想要結果是150,我們需要先用括號,把num1跟num2包起來。
var num1 = 100;
var num2 = 50;
var str = "100加上50是" + (num1 + num2);
console.log(str);
// 結果會是 "100加上50是150"
減號(-)
一樣如果單純做數字之間減號運算,沒什麼太大問題:
var a = 5 - 3;
console.log(a) //2
那如果是數字與字串做減法運算,你可能會猜說是不是跟加法一樣嘗試將數字轉型成字串?結果不是!
100 - "50" // 50
100 - "abc" // NaN
在減號運算中, 字串會嘗試轉型成數字,所以第一個 "50" 會變成數字50,而"abc" 會是NaN。
與其他型別做減法運算一樣其他型別會轉型成數字:
// false 經過 Number() 轉型成數字後,會變成 0
100 - false // 100
100 - true // 99
100 - undefined // NaN
100 - null // 100
乘號(*)
乘法運算子由一個星號 「*」 來代表,計算前後兩個數值的乘積。
var a = 5 * 5 ;
console.log(a); // 25
如果有其中一個不是數字的話,一樣會先轉型成數字:
100 * "10" // 1000
100 * "abc" // NaN
100 * true // 100
100 * false // 0
除法(/)
乘法運算子由一個斜線 「/」 來代表,在前後兩者都是數字的情況下,計算結果就是兩個數值的商。
var a = 100/10;
console.log(a); // 10
之前的篇章有提過,在除數為 0 的情況下:
10/0 // Infinity
-20/0 // - Infinity
0/0 // NaN
如果有其中一個不是數字的話,一樣會先轉型成數字。
100 / "10" // 10
100 / "abc" // NaN
100 / true // 100
100 / false //Infinity
取餘數(%)
取餘數以百分比符號 「%」 來表示:
var a = 100 % 3;
console.log(a); // 1
與乘法和除法一樣的是,如果有其中一個不是數字的話,會先轉型成數字。
100 % "10" // 0
100 % "abc" // NaN
100 % true // 0
100 % false // NaN
以上就是最常見的算術運算子,後續的文章將繼續來介紹 JavaScript 的其他運算子,我們明天見!