---
# System prepended metadata

title: 六、沒那麼簡單：變數的運算
tags: [2020六月第五週, JS101, 7/4, Lidemy心得, 進度筆記, JavaScript]

---

# 六、沒那麼簡單：變數的運算 
###### tags: `JavaScript` `JS101` `2020六月第五週` `進度筆記` `Lidemy心得` `7/4`

---

## 1. 變數運算
基礎變數運算:

    var a = 10
    var b = 20 
    console.log(a + b)
    
    // 結果會印出 30 。
---

## 2. 其實要注意型態
如果運算的時候混了 primitive 的字串進去:

    var a = 10
    var b = '20'        // 這是字串 ' ' 。
    console.log(a + b)
    
    //
    
    var a = '10'        // 這是字串 ' ' 。
    var b = 20
    console.log(a + b)

    
    // 結果會印出 1020 ， 因為如果 var b 將 '20' 理解成字串(文字)時，也會將 var a 理解成字串(文字) 。

## 3. 字串可以轉成數字
可以用 Number( ) (Number 開頭 N 要大寫) 和 parseInt( ) (parseInt 開頭 p 要小寫) 來轉:

    var a = '10'
    var b = 20
    console.log(Number (a) + b)

    // 或是 b 是字串的情況 ， Number 要往後移; 

    var a = 10
    var b = '20'
    console.log(a + Number(b))
 
    // 會印出 30 ， 因為會像是文字連接，而不是數字相加; 
    

    var a = '10'
    var b = 20
    console.log(parseInt (a) + b)

    // (parseInt (a, 10) + b) 表示 a 這個數字回傳 10 進位，也可以傳其他進位制，不傳就會自己判斷; 或是 b 是字串的情況 ， parseInt 要往後移; 

    var a = 10
    var b = '20'
    console.log(a + parseInt(b))
 
    // 會印出 30 ; 
    
## 4. 浮點數誤差

    var a = 0.1 + 0.2
    console.log(a == 0.3)    // == 表示判斷這兩個東西是不是相等，但答案會是 false ， 印出 a  會發現 小數點多了一點。
    console.log(a)  
    
![](https://i.imgur.com/mSq8cay.png)

大部分程式語言，會因為電腦存小數的時候無法存得很精準，所以相加會有誤差，可以的話盡量不要用到小數。
    
# 七、 == 與 ===

## 1. 複習 一個 = 
一個 = 是賦予值的意思，如:

    var a = 10
    
    // 但如果改成 ==
    
    var a == 10 
    
    // 會出錯不認得這符號。
   
## 2. == 會判斷這兩個東西是否相等
如果用 == 就相當於等號，會檢查並判斷兩物是否相等，會先將比較值轉成同型態再作比較，但不會比較型態:

    var a = 10
    console.log(a == 10)
    
    // 答案會是 true 。
    
    var a = 10
    console.log(a = 10)
    
    // console.log(a = 10) 這行少一個 = 的時候容易出 bug ， 這時候會先執行 a = 10 ， 並且把 a = 10 看作是 a == 10 再執行 console.log 

    var a = 10 == 10
    console.log(a)
    
    // 答案一樣會是 true ， 執行順序一樣是從右到左 。
---    
最好的方式還是要用 作用範圍 ( ) 刮起來:

    var a = (10 == 10)
    console.log(a)
    // 答案會是 true 。
    
    console.log(0 == '')
    // 會將 '' 轉成同型態，視為 0 ， 因此答案會是 true。

## 3. 如果是嚴格相等(三等或全等) === 和一般相等 == 差在哪裡 ？
如果用三個等號 === ，建議使用因為 debug 比較知道型態有沒有問題:    

    var a = 10
    console.log(a === 10)
    
    // 答案會是 true 。
    
三個等號 === 和兩個等號 == 差別差在型態，因為三個等號會檢查並比較左右兩邊的型態，而兩個等號不會檢查型態，用數字 0 與字串 '0' 相比，型態不同就會回傳 false 視為不相等:

    console.log(0 === '0')
    
    // 答案會是 false ，因為左邊是數字右邊是字串。 
    
    
[參考來源:](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Equality_comparisons_and_sameness)
    