iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
1
自我挑戰組

純新手學習 JavaScript系列 第 5

新手學習JavaScript: day05 - 一元運算子與比較運算子之轉型轉到死(2)

  • 分享至 

  • xImage
  •  

昨天介紹了算術運算子的加、減、乘、除.今天讓我們來聊聊,同樣也算是算術運算子,但只需要單個數值就能做運算,而這類型的運算子我們之前有提過,也就是一元運算子。除此之外,還有也是在寫程式會常常遇到的比較運算子。

一元運算子

在一元運算子當中最基本的就是正號(+)與負號(-)

var a = +10;
console.log(a); //10

var b = -10;
console.log(b); //-10

一樣,基本的數字情況沒什麼太大問題,不過如果正負號後面的不是數字型態,會有什麼結果呢?

var str = "wow";
console.log(+str); //NaN
console.log(-str); //NaN

var str2 = "-20";
console.log(+str2); //-20
console.log(-str2); //20

var a = true;
console.log(+a); //1
console.log(-a); //-1

var b = false;
console.log(+b); //0
console.log(-b); //-0

var c = undefined;
console.log(+c); //NaN
console.log(-c); //NaN

var d = null;
console.log(+d); //0
console.log(-d); //-0

從結果可以瞭解正負號後面遇到不是數字型態,會透過Number()方法嘗試將其轉型,再看前面是正好還是負號來決定值。

除了正負號,另一種更常見的就是遞增(++)與遞減(--)。
直接來看範例:

var a = 0;

a++;

console.log(a); // 1

a--;

console.log(a); //0

我們可以發現當變數遇到++,就會加1,而-- 就會減1,所以,也可把整個運算式看做是 a = a + 1 與 a = a - 1。

比較特別的是,當++ 與 -- 放在變數前面也會有同樣的效果:

var a = 0;

++a;

console.log(a); // 1

--a;

console.log(a); //0

但要特別注意的是放在前後其實是有差異的,讓我們看下面的範例:

var a = 10;
var b = 10;


console.log(a++); //10
console.log(++b); //11

console.log(a); // 11
console.log(b); // 11

可以發現,放在變數後面,回傳的結果是原始值,而放在變數前面,是回傳+1之後的結果。

比較運算子

比較運算子就是,兩側的運算元做比較,比較的結果會回傳boolean值,一樣如果兩側的型別不一樣,JavaScript會嘗試將兩側轉型為同個型別後,再做比較。

比較運算子主要有:

  • ==(相等)
  • === (嚴格相等)
  • != (不等於)
  • !== (嚴格不等於)
  • >=
  • <=

首先,我們先來瞭解相等 「==」,之前有提過一個等號「=」,我們會稱為指派,那兩個等號「 == 」,我們會稱為比較,來看下面的範例:

var a = 10;
var b = 20;

console.log(a == b); //fasle
console.log(b == 20); //true

同樣的在相等的型態之下,比較是沒什麼太大問題。但遇到兩個不同的型態,那就是很大的問題了,來看下面這些令人匪夷所思的範例:

var a = 10;
var b = "10";

cosole.log(a == b); //true 

true == "true" // false

false == "false" // false

null == undefined //true

在比較的時候,JavaScript會將兩個自動轉型為同個型別,產生出這些結果。所以呢,三個等號 「===」 的比較,可以避免這樣奇怪的事情發生。

var a = 10;
var b = "10";

cosole.log(a === b); //false

true === "true" // false

false === "false" // false

null === undefined //false

三個等號不會自動轉型,所以以上結果都是false ,只有在相同的型別及相同的數值,才會產生true。所以,在做比較的時候建議使用 === 來做比較,會比較清楚且嚴謹。

雖然說用三個等號來做比較可以避免轉型發生,相信大家還是會很好奇,兩個等號的比較,運算元之間的轉型規則到底是什麼?這個謎題就留到明天再說吧!

各位明天見!


上一篇
新手學習JavaScript: day04 - 運算式、運算元與運算子,轉型轉到死(1)
下一篇
新手學習JavaScript: Day06 - 自動轉型規則與指派運算子
系列文
純新手學習 JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言