在前面的文章中,我們認識了各種 JavaScript 運算子,像是加減乘除這類常見的符號。
但你知道嗎?並不是所有的運算子都是符號,有些運算子其實是用「文字」來表示的。
這篇文章會介紹一個很實用的文字運算子 typeof,同時帶你搞懂「一元運算子」和「二元運算子」的差別。
用文字表示的運算子:typeof
大部分的運算子都是符號,像是 +、-、*、/。
但 typeof 是一個用英文單字表示的運算子,它的功能是:告訴你一個值的資料型態是什麼。
typeof 的運算結果會用「字串」來回傳型態名稱。
來看幾個例子:
console.log(typeof 4.5);
// → "number"把數字 4.5 丟給 typeof,它會回傳 "number",表示這是一個數字型態。
console.log(typeof "x");
// → "string"把 "x" 丟給 typeof,它會回傳 "string",表示這是一個字串型態。
這裡我們用了 console.log() 這個函式,目的是把程式的執行結果顯示出來,讓我們可以看到運算後的值。
關於 console.log() 的更多用法,會在下一章進一步介紹。
一元運算子 vs 二元運算子
在前一篇文章中,我們把運算子比喻成「接線生」。
接線生的工作是:拿起左邊的一條線,連結到右邊的一個插孔,讓通訊發生。
程式裡的 + 也是一樣——它把左邊的 100 和右邊的 4 拿起來,操作它們,最後產生一個結果 104。
而且我們也提到,運算子的用法很固定:放在兩個值之間,JavaScript 就會對這兩個值進行計算,然後產生一個新的值。
100 + 4 // 把左邊的 100 和右邊的 4 拿起來,做加法,產生 104
10 - 2 // 把左邊的 10 和右邊的 2 拿起來,做減法,產生 8但現在來看 typeof 的用法:
typeof 4.5有沒有發現不一樣的地方?
typeof 的旁邊只有一個值 4.5,不像 + 需要左右兩邊各一個值。
換句話說,+ 需要左右兩邊各給它一個值,它才有辦法工作。
但 typeof 不一樣,你只要給它一個值,它就能告訴你結果。
這就是「一元」和「二元」的差別:
- 二元運算子(binary operator):需要兩個值來進行運算。
+、-、*、/都是二元運算子,少給一邊它就不知道該怎麼算。 - 一元運算子(unary operator):只需要一個值就能進行運算。
typeof就是一元運算子,給它一個值,它就能回傳這個值的型態。
一個運算子可以同時是一元和二元嗎?
答案是可以的。
-(減號)就是一個特別的例子,它可以同時扮演兩種角色。
當 - 放在兩個值之間時,它是二元運算子,執行的是「減法」:
console.log(10 - 2);
// → 8但當 - 放在一個值的前面時,它變成了一元運算子,執行的是「取負值」:
console.log(-(10 - 2));
// → -8這裡 10 - 2 先計算得到 8,然後前面的 - 把它變成負數 -8。
小結
- 運算子不一定是符號,也可以是文字,例如
typeof。 typeof可以告訴你一個值的資料型態,結果會用字串回傳。- 二元運算子需要兩個值來運算,一元運算子只需要一個值。
- 有些運算子可以同時是一元和二元,像
-就是一個例子。