昨天我們提到了使用兩個等號 「==」的比較運算式下,如果兩個運算元型別不一樣,那JavaScript會在背後進行自動轉型。今天就來讓我們好好瞭解轉型的規則吧!
「字串」與「數字」做比較時,則會將字串透過Number()轉型為數字,再進行比較。
「布林值」與其他型別做比較時會先將true轉型為數字1,false轉行為數字0。
如果其中一方是物件而另一方是基本型別,會用 valueOf() 方法取得基本型別的值,再比較。
再來看看範例:
var a = 10;
var b = "10";
cosole.log(a == b); //true
// 因為字串轉為數字10,所以得到true
true == "true" // false
// true 轉為1,1跟字串"true",那字串"false"會變成NaN,最後比較結果是 false
false == "false" // false
// true 轉為0,0跟字串"false",那字串"false"會變成NaN,最後比較結果是 false
接下來我們來看看大小的比較,也就是大於、小於、大於等於以及小於等於。
var a = 5;
var b = 10;
var c = 15;
var d = 10;
console.log(a > b); //false
console.log(a < b); // true
console.log(b > d); //false
console.log(b >= d); //true
5 < 10 < 15 // true
// 5 < 10 是 true, true < 15 ,true 轉型成1 ,1 < 15,所以最後是 true
15 > 10 > 5 // false
// 15 > 10 是 true, true > 5 ,true 轉型成1 ,1 > 5,所以最後是 false
這類型的運算子也符合上面介紹的轉型規則,有一點點差異:
兩者都是字串,則會依照字母的順序來進行比較。
物件的話,會用 valueOf() 方法取到對應的值,如果沒有的話在用 toString() 轉型比較。
最後我們來補充一下,什麼事指派運算子呢?其實就是我們常常在用的一個等號(=)。
var a = 10 + 20;
它其實除了單純的指派以外,還能與算數運算子做結合:
var a = 10;
a += 10;
console.log(a) // 20
這邊的 a+=10,其實是 a = a + 10,會將右側運算式,運算完成再指派給變數a。那當然除了加法其他的算數運算子也能做結合:
a -= b
// a = a - b
a *= b
// a = a * b
a /= b
// a = a / b
a %= b
// a = a % b
以上就是今天的內容啦,謝謝大家!我們明天見!