# JS 學習筆記(4) - 值的比較與運算符 - [重新認識 JavaScript: Day 05 JavaScript 是「傳值」或「傳址」?](https://ithelp.ithome.com.tw/articles/10191057) - [重新認識 JavaScript: Day 06 運算式與運算子](https://ithelp.ithome.com.tw/articles/10191180) - [The JavaScript languageObjects - 值的比较](https://zh.javascript.info/comparison) - [The JavaScript languageObjects - 基础运算符,数学](https://zh.javascript.info/operators#shu-yu-yi-yuan-yun-suan-fu-er-yuan-yun-suan-fu-yun-suan-yuan) ## 值的比較 我們知道,在數學中有很多用於比較大小的運算符。 在 JavaScript 中,它們的編寫方式如下: * 大於 / 小於:a > b,a < b。 * 大於等於 / 小於等於:a >= b,a <= b。 * 檢查兩個值的相等:a == b,請注意雙等號 == 表示相等性檢查,而單等號 a = b 表示賦值。 * 檢查兩個值不相等。不相等在數學中的符號是 ≠,但在 JavaScript 中寫成 a != b。 比較的結果均返回**布林值** ```javascript= alert( 2 > 1 ); // true alert( 2 == 1 ); // false alert( 2 != 1 ); // true let result = 5 > 4; // 把比較的結果給 result alert( result ); // true ``` ### 字串比較 字串會按Unicode編碼順序進行判定,並且是按字符逐個比較 ```javascript= alert( 'Z' > 'A' ); // true alert( 'Glow' > 'Glee' ); // true alert( 'Bee' > 'Be' ); // true ``` **Unicode編碼** 可以看到,小寫 o 為 006F,小寫 e 為 0065,因 o > e,所以 `'Glow' > 'Glee'` 為 true。  ### 不同型別比較 JS會先將值轉為**數字型別**(number)再進行比較 ```javascript= alert('2' > 1); // true alert('01' == 1); // true ``` 布林值`true = 1 , false = 0` ```javascript= alert(true == 1); // true alert(false < 1); // true ``` 但這會造成一個問題就是,無法區分出 0 和 false ```javascript= alert( 0 == false ); // true ``` 也無法區分出空字串和false ```javascript= alert( '' == false ); // true ``` #### 嚴格相等 如果想要解決上述的問題,可以使用三個等號 === 比較 ```javascript= alert( 0 === false ); // false ``` 同樣的,不等於為 `!=` 嚴格不相等即為 `!==` :::warning 當使用數學式或其他比較方法 `< > <= >=` 時: `null/undefined` 會被轉化為數字:`null` 被轉化為 `0`,`undefined` 被轉化為 `NaN`。 ::: ### 物件型別比較 兩個物件,屬性都有value 比較會相同嗎? ```javascript= var obj1 = { value: 10 }; var obj2 = { value: 10 }; alert( obj1 == obj2 ); // false ``` 如果使用傳值的方式再去比較,則會相同: ```javascript= var obj1 = { value: 10 }; var obj2 = obj1; alert( obj1 == obj2 ); // true ``` 詳細的請參考 [重新認識 JavaScript: Day 05 JavaScript 是「傳值」或「傳址」?](https://ithelp.ithome.com.tw/articles/10191057) ## 基礎運算 ### 運算子與運算元 假設一個運算式(Expression)為 `var a = 10 * 10;`,其中的 `10` 即為運算元(Operand);`*` 為運算子(Operator)。 運算子可以分為以下幾類: 1. 算術運算子 (Arithmetic Operator) 1. 指派運算子 (Assignment Operator) 1. 位元運算子 (Bitwise Operator) 1. 比較運算子 (Comparison Operator) 1. 邏輯運算子 (Logical Operator) 1. 字串運算子 (String Operator) 1. 特殊運算子 (Special Operator) ### 算術運算子 最基本的 + - * / 加減乘除 * 加法 + * 减法 - * 乘法 * * 除法 / * 取餘數 % * 求冪 ** * 遞增 ++ * 遞減 -- #### 取餘 a % b 為 a 除以 b 的餘數: ```javascript= alert( 5 % 2 ); // 1,5 除以 2 的餘數 alert( 8 % 3 ); // 2,8 除以 3 的餘數 ``` #### 求冪 a ** b 為 a 乘以自身 b 次: ```javascript= alert( 2 ** 2 ); // 4 , 2*2 alert( 2 ** 3 ); // 8 , 2*2*2 alert( 2 ** 4 ); // 16 , 2*2*2*2 ``` #### 遞增與遞減 ++ 即為變數+1;--為變數-1 ```javascript= var a = 10; a++; console.log(a); // 11 , a = a + 1; a--; console.log(a); // 10 , a = a - 1; ``` ++ 與 -- 擺放的位置不同也會有差異 ```javascript= var a = 10; var b = 10; console.log(a++); // 10 console.log(++b); // 11 console.log(a); // 11 console.log(b); // 11 ``` :::success a++ 代表 先輸出 a 再 +1;++b 代表 先將 b+1 再輸出 b。 ::: ### 比較運算子 比較運算子用來比較兩邊數值,返回的值為 true 或 false #### == 與 === (等於) 這部分前面值的比較提到過,就不再提 #### != 與 !== (不等於) 概念同上,就不再提 #### > 與 < (大於小於) 大於 `>` 小於 `<` 的比較,若是兩者為不同型別比較,會嘗試將其改為數值型別再進行比較 除此之外還有 `>=`(大於等於) 和 `<=`(小於等於) ```javascript= var a = 10; var b = 11; var c = 10; console.log( a > b ); // false console.log( b > a ); // true console.log( a > c ); // false console.log( a >= c ); // true ``` :::warning => 不是運算子,是 ES6 的箭頭函式 ::: ### 指派運算子 常見的指派運算子:  ### 邏輯運算子 邏輯運算子 通常被用於布林(邏輯)值; 使用於 布林(邏輯)值時, 它們會回傳布林型態的值。 然而,&& 和 || 運算子實際上是回傳兩指定運算元之一,因此用於非布林型態值時,它可能會回傳一個非布林型態的值。  * 對 `||` 運算子來說,若第一個數值轉換為 true,則回傳第一個數值,否則回傳第二個數值。 * 對 `&&` 運算子來說,若第一個數值轉換為 true,則回傳第二個數值,否則回傳第一個數值。 --- 詳細的運算子說明請參考:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Expressions_and_Operators
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up