比較運算子的意思就是用運算子前後的兩個值去做比較,然後會回傳為布林值的結果。
運算子 | 功能 | 描述 | 範例(let a = 3) | 回傳結果 |
---|---|---|---|---|
== | 等於(寬鬆) | 檢查前後的值是否相等 | a == 3 | true |
=== | 等於(嚴謹) | 檢查前後的值跟型別是否相等 | a === 3 | true |
!= | 不等於(寬鬆) | 檢查前後的值是否不相等 | a != 3 | false |
!== | 不等於(嚴謹) | 檢查前後的值跟型別是否不相等 | a !== 3 | false |
> | 大於 | 檢查前面的值是否大於後面的值 | a > 3 | false |
< | 小於 | 檢查前面的值是否小於後面的值 | a < 3 | false |
>= | 大於等於 | 檢查前面的值是否大於等於後面的值 | a >= 3 | true |
<= | 小於等於 | 檢查前面的值是否小於等於後面的值 | a <= 3 | true |
了解有哪些比較運算子後,我們就可以用它們來做一些判斷:
今天考試,小明考了68分,小華考了59分,他們有沒有及格呢?
let mingScore = 68;
let huaScore = 59;
let passScore = 60;
console.log(mingScore >= passScore); // true 大於60分,有及格
console.log(huaScore >= passScore); // false 沒有大於60分,沒及格
console.log(huaScore < mingScore); // true 小華的分數比小明的分數低
console.log((huaScore + mingScore)/2 >= passScore); // true 小華跟小明的平均分數大於及格分數
由上可知,我們也可以使用變數來做比較,值則可以是數字、字串、物件或是邏輯。
console.log(56 === 56); // true
console.log("hello" === "hello"); // true 也可以用字串來比較
console.log(true === true); // true 布林值也可以
console.log("hello" !== "hello"); // false
console.log("hello" !== "hi"); // true
console.log(1 !== 2); // true
=
:一個等於 =
是賦予值的意思
let a = 1; // 賦予變數 a 的值為 1
==
:兩個等於 ==
是比較運算子,檢查前後是否相等的意思
let a = 1;
let b = 1;
console.log(a == b); // true
但要特別注意的是兩個等於 ==
會協助轉型,在自動轉型的情況下可能會出現下面的例子:
let a = 1; // 數字型別
let b = "1"; // 字串型別
console.log(a == b); // true ???
這是一個弔詭的狀況,明明兩個是不同型別,回傳的結果卻是 true
,這也是為什麼說兩個等於==
是寬鬆的,且現在都不推薦使用。
===
:三個等於 ===
也是比較運算子,檢查前後是否相等的意思,但相較於兩個等於 ==
,它多了一個型別的條件,也就是說三個等於 ===
在比較的同時也會看型別,兩個型別也要一樣才會回傳 true
的結果。
let a = 1; // 數字型別
let b = "1"; // 字串型別
console.log(a === b); // false
比較完型別不正確就會回傳 false
,因為這種嚴謹的比較相較起來發生問題的機率小得多,所以現在通常都建議使用三個等於 ===
而非兩個等於 ==
。
運算子 | 功能 | 描述 |
---|---|---|
&& ( And ) | 而且 | 同時滿足條件(前後都是 true 的狀況)會回傳 true ,否則回傳 false |
|| ( Or ) | 或是 | 滿足其一條件(前後只要有一個是 true 的狀況)就會回傳 true |
! ( Not ) | 非 | 將後面的布林值轉換為相反的值 |
以下直接用程式碼來說明:
&&
let apple = 1;
let book = 2;
console.log(apple === 1); //true
console.log(book === 2); //true
console.log( apple === 1 && book === 2); //true
//左側為 true 「且」 右側也為 true,同時滿足兩側為 true,回傳結果 true
console.log(apple === 1); //true
console.log(book === 3); //false
console.log( apple === 1 && book === 3); //false
//不符合左側為 true 「且」 右側也為 true,所以回傳 false
||
同樣的例子如果改為 ||
let apple = 1;
let book = 2;
console.log(apple === 1); //true
console.log(book === 2); //true
console.log( apple === 1 || book === 2); //true
//左側或右側只要其中之一為 true,回傳結果 true
console.log(apple === 1); //true
console.log(book === 3); //false
console.log( apple === 1 || book === 3); //true
//左側為 true,右側為 false,左「或」右其中之一有滿足條件,所以回傳 true
console.log(apple === 2); //false
console.log(book === 3); //false
console.log( apple === 2 || book === 3); //false
//兩側皆為 false,不滿足其中之一為 true 的條件,所以回傳 false
&&
:商店有個大禮包,購買的資格為商店的會員,「而且」有在該商店消費 10000 元以上才能參與抽獎(同時滿足兩個條件才能抽獎)
let cost = 11200; //消費 11200 元
let isMember = true; //是會員
console.log(cost >= 10000 && isMember === true); // true
||
:商店有個大禮包,購買的資格為商店的會員,「或是」有在該商店消費 10000 元以上就能參與抽獎(只要滿足其中一個條件就能抽獎)
let cost = 19600; //消費 19600 元
let isMember = false; //不是會員
console.log(cost >= 10000 || isMember === true); // true
由於可以使用到的情境非常多,「比較運算子」跟「邏輯運算子」都是之後會很常見到的運算子,希望大家都能更了解它們喔!