昨天介紹了算術運算子的加、減、乘、除.今天讓我們來聊聊,同樣也算是算術運算子,但只需要單個數值就能做運算,而這類型的運算子我們之前有提過,也就是一元運算子。除此之外,還有也是在寫程式會常常遇到的比較運算子。
在一元運算子當中最基本的就是正號(+)與負號(-)
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。所以,在做比較的時候建議使用 === 來做比較,會比較清楚且嚴謹。
雖然說用三個等號來做比較可以避免轉型發生,相信大家還是會很好奇,兩個等號的比較,運算元之間的轉型規則到底是什麼?這個謎題就留到明天再說吧!
各位明天見!