--- title: 'JS 影音 3 - 數字型別與賦值運算子、字串型別' tags: JS 直播班 ,JS , JavaScript, ES6 description: 2021/02/06 --- JS 影音 -- 數字型別與賦值運算子、字串型別 === ## 數字型別 與 賦值運算子 ### 賦值運算子 += 、 -= ```typescript let a = 50; a = a + 100; // 取出 a 變數,並重新賦予新值,此時 a 為 150 a = a + 150; // 取出 a 變數,並重新賦予新值,此時 a 為 300 console.log(a); // 300 ``` :pencil2: **範例 : 使用賦值運算子寫法** 小明錢包有 50 元,小明存了 200 元進去,後來又存了 150 元,請問小明錢包共有多少錢 ? ``` let a = 50; a = a + 200; // 使用賦值運算子寫法 a += 150; // 縮寫 console.log(a); // 400 ``` ### a++ 、 a -- ```typescript let a = 0; let b = 0; a++; // 針對自己的數值再加 1 a++; b++; console.log( "a 為" + a , "b 為" + b); // a為2 b為1 ``` ### :bulb: 作業 「阿貓與阿狗玩棒球,要記錄比分。 流程一:第一回合,阿貓得 3 分,阿狗得 2 分。 流程二:第二回合,阿貓得 20 分,阿狗得 3 分。 流程三:中間有插曲,就是阿貓作弊,第二回合才得 2 分卻謊報 20 分,所以必須扣掉 18 分。 流程四:第三回合,阿貓得 1 分,阿狗得 7 分。 請問雙方總得分各是幾分 ? 比了幾回合 ? ```typescript let roundNum = 0; let catScore = 0; let dogScore = 0; roundNum++; // 第一回合 catScore += 3; dogScore += 2; roundNum++; // 第二回合 catScore += 20; catScore -= 18; // 阿貓作弊,扣掉 18 分 dogScore += 3; roundNum++; // 第三回合 catScore += 1; dogScore += 7; console.log(`總得分:阿貓 ${catScore} 分、阿狗 ${dogScore} 分`); // 阿貓 6 分、阿狗 12 分 console.log(`總共比了 ${roundNum} 回合`); // 比了 3 回合 ``` ### :bulb: 作業 -- 鍛鍊:拆解任務流程與設定變數 「幫媽媽跑腿,紀錄花了多少錢,與跑腿了幾次」 小明的媽媽請她跑腿,因為小明一天規定自己只能出門三次,所以和媽媽說最多跑三次腿 小明媽給了小明 300 元,請他去買兩罐牛奶跟兩份吐司,小明到超商後看到牛奶 30 元吐司 20 元 當她到櫃台結帳時,櫃台告訴他剛好今天全部品項都打 5 折 ! 買回家後,媽媽發現小明的東西都有買齊,就讓小明去玩耍了。 <span class="green">請試著拆解流程,並透過註解告知您的解題流程。 最後兩行 code 請用 console.log 印出最後小明花完剩下多少錢,以及當天還能跑腿幾次的變數。 </span> ```typescript let goTimes = 3; // 規定自己只能出門3次 let myMoney = 300; let milkNum = 2; let toastNum = 2; let milkPrice = 30*0.5; // 打 5 折 let toastPrice = 20*0.5; // 打 5 折 let total = myMoney - (milkNum*milkPrice + toastNum*toastPrice); goTimes--; // 幫媽媽買牛奶跟吐司 goTimes--; // 小明去玩耍 console.log(`小明花完剩下 ${total} 元,當天還能跑腿 ${goTimes} 次`); // 小明花完剩下 250 元,當天還能跑腿 1 次 ``` ## 字串型別 ### 宣告字串流程 字串一定要成對加上 **'單引號' 或 "雙引號"** , 不然 JS 會以為是數字型別。 ```typescript let a = 'Hello'; let b = '你好嗎 ?'; console.log(a, b); // Hello 你好嗎 ? ``` ### 字串相加 ```typescript let a = 'Hello'; let b = '你好嗎?'; let total = a + ' ' + b ; // 加上一個半形空白 console.log(total); // Hello 你好嗎 ? ``` ### 透過 typeof 瞭解當前變數型別 變數沒有型別,變數可在不同時間點持有不同型別的值,因此,只有「值」才有型別。雖然我們可用 typeof 檢測某個變數所儲存的值的型別,但記得並不是檢測變數本身,而是變數所存的值。 ```typescript typeof null; // 'object' typeof undefined; // 'undefined' typeof function() {}; // 'function' typeof NaN; // 'number' ``` ### 自動轉型 > **數字與字串相加 : 數字自動轉型為字串** ```typescript let a = 'Tom'; let age = 18; let total = a + age; console.log(total); // Tom18 console.log(typeof total); // String ``` ```typescript let c = '小美'; let weight = 55; console.log(`HI 我是${c} , 我體重 ${weight} 公斤`); // HI 我是小美 , 我體重 55 公斤 ``` > **NAN 非數字 (屬數字型別) : 無法相乘,回傳 NAN** ```typescript let myName = 'Tom'; let age = 18; let total = myName * age; console.log(total); // NAN (回報異常) console.log(typeof total); // Number ``` > **parseInt ( ) : 把原本的字串變成數字型別** ```typescript let a = '20'; console.log(typeof a); // String a = parseInt(a); // 把字串變成數字型別 console.log(a); // 20 console.log(typeof a); // Number ``` > **若把非數字的字串使用 parseInt ( ),就會出現 NAN** ```typescript let myName = parseInt('Tom'); console.log(myName); // NAN (回報異常,不是數字) console.log(typeof myName); // Number 確實轉成數字型別 ``` ### 字串處理實用方法 #### 使用 a.length 來查詢字元的長度 ```typescript= let youName = ' Mark '; console.log(youName.length); // 有 6 個字元 (含空白字元) ``` #### 使用 String.trim( ) 把多餘的<span class="red">前後空白</span>濾掉,並回傳成新字串 <span class="red">一定要再重新賦予值才正確</span> ```typescript=3 youName = youName.trim(); // 把前後空白濾掉,並重新指向賦予新值 console.log(youName); // Mark (前後空白去掉了) console.log(youName.length); // 有 4 個字元 ``` ### 變數記憶體 value 指向 使用**等於**賦予、指向新的變數記憶體 ``` let myEmail = ' Tom '; // 前後含2格空白 let nameLength = myEmail.length; console.log(myEmail); // Tom (前後含2格空白) console.log(nameLength); // 7 myEmail = myEmail.trim(); // 使用等於指向新的記憶體空間,並賦予新值 nameLength = myEmail.length; console.log(myEmail); // Tom (前後已無含2格空白) console.log(nameLength); // 3 ``` ### 樣版字面值教學 使用字串相加寫法 ``` let myName = 'Tom'; let myAge = 18; let content = "您好我是" + myName +"我今年" + myAge + "歲"; console.log(content); // 您好我是Tom我今年18歲 ``` 使用 ES6 寫法 * 此寫法減少很多加號、雙引號 * 段落前後使用反引號 (ㄅ按鍵旁邊),並使用 $ { } 來存放變數 ``` let content = `您好我是 ${myName} 我今年 ${myAge} 歲`; ``` ## :+1: 相關參考文件 :::info [你懂 JavaScript 嗎?#4 型別(Types)](https://cythilya.github.io/2018/10/11/types/) ::: <style> .red { color: red; } .green { color: green; } .green { color: green; } </style>