iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
自我挑戰組

純新手學習 JavaScript系列 第 4

新手學習JavaScript: day04 - 運算式、運算元與運算子,轉型轉到死(1)

上一篇介紹了變數與型別,在一些範例當中,其實已經運用到了運算式與運算子,那他們究竟是什麼呢?今天就來瞭解它們吧!

運算式(Expression)、運算子(Operator)和運算元(Operend)

首先,我們直接來看下面這一行:

var a = 1 + 2;

上面宣告了一個變數a,並且指派1 + 1 的值給它。在 = 號的右側也就是 1+2就是運算式,而 + 就是運算子。其實,我們從小就學過的四則運算「加、減、乘、除」都是屬於運算子的一種。

完整翻譯一下就是,在運算式中,我提供了兩個運算元也就是1、2,交給運算子+來運算並且會得到一個值,也就是3,然後指派給變數a。

再來,從運算子和運算元的關係,JavaScript 的運算子,有所謂的一元 (unary) 運算子、二元 (binary) 運算子和三元 (ternary) 運算子。

一個一元運算子,顧名思義需要一個運算元,可以放在前面或是後面:

x++

++x

以此類推,二元運算子需要兩個運算元:

2 + 2

x + y

至於三元運算子我們再之後會提到。相信看到這裡,沒有學過程式的人,看到一元運算子的 ++應該會有些疑問,其實除了基本的「加、減、乘、除」,還有許多運算子,大致上可以分為下列幾種:

  • 算術運算子 (Arithmetic Operator)
  • 指派運算子 (Assignment Operator)
  • 位元運算子 (Bitwise Operator)
  • 比較運算子 (Comparison Operator)
  • 邏輯運算子 (Logical Operator)
  • 字串運算子 (String Operator)
  • 特殊運算子 (Special Operator)

今天先來介紹算術運算子。

算術運算子

算術運算子應該是程式語言中最為常見的一種,也是最為單純。但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 的其他運算子,我們明天見!


上一篇
新手學習JavaScript: day03 - 基本型別好多種,宣告變數好難懂
下一篇
新手學習JavaScript: day05 - 一元運算子與比較運算子之轉型轉到死(2)
系列文
純新手學習 JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言