在這一篇,就會完成這個計算機了!
我的 codepen 範例
https://codepen.io/saffranwang/full/XWJdmWx
現在,我想先看看:變數hamNum
和cokeNum
兩個相加的值,也就是:「漢堡 + 可樂」的數量
JS:
1 | document.getElementById('countId').onclick = function(){ |
我在欄位中輸入
- 漢堡 10 個
- 可樂 5 杯
照理來說,Console 應該要出現 15 才對(10 + 5),為什麼是出現「105」呢?(無法做“加減乘除”)
原因為:
判別「型別」的方式:使用typeof()
例如:
「數字」的型別
在 Console 輸入typeof(3)
,再按下 enter,就會顯示出「“number”」,代表是「數字」的型別
「字串」的型別
在 Console 輸入typeof('hello')
,再按下 enter,就會顯示出「“string”」,代表是「字串」的型別
「function」的型別
在 Console 輸入typeof(function(){alert('hello')})
,再按下 enter,就會顯示出「“function”」,代表是「function」的型別
「物件」的型別
在 Console 輸入typeof({tom:'john'})
,再按下 enter,就會顯示出「“object”」,代表是「物件」的型別
再回到計算機的案例中,我想要查詢「變數hamNum
」的值,到底是「字串 or 數字」
🎃 因此,就使用console.log(typeof(hamNum));
來查詢
JS:
1 | document.getElementById('countId').onclick = function(){ |
我在欄位內輸入:
- 漢堡 10 個
點擊「計算中」,在 Console 顯示的是「string」代表:「變數hamNum
」的值,是屬於「字串」的型別
🎃 「字串 + 字串」
而「字串 + 字串」,並不會去做「加減乘除」,而是直接「接續寫出值」像下面這樣:
唯一的一個例外:但是,在 JavaScript,用「字串 * 字串」就可以去做「加減乘除」,像是這樣
🎃 「數字 + 數字」
「數字 + 數字」,就可以去做「加減乘除」像下面這樣:
要做「加減乘除」,就要把「字串」轉型成「數字」
要如何把「字串」轉型成「數字」呢?
作法如下
parseInt()
把「字串」轉型成「數字」
例如,我現在有一個「字串」:
1 | var num = '3'; |
🎃 使用parseInt()
把「字串」轉型成「數字」
[語法說明]
- parse:對(句子)作文法分析。 (verb)
- Int:integer 整數
[定義]
parseInt()
是用來「對一個“string”做分析後,回傳相應的一個“integer”」
我在 JS 就這樣寫:
1 | var num = '3'; |
意思就是:
- 我先宣告這個變數
var num = '3';
- 再賦予這個變數
num
一個「新的值」= parseInt(num)
= 從「字串」轉型成「數字」
這時,我在 Console 用typeof()
去查詢num
的型別,就會顯示「“number”」了
再回到計算機的案例,我要將這兩個變數「hamNum
和cokeNum
」,從「字串」轉型成「數字」
作法如下:
🎃 將變數的外層都用parseInt()
包起來
JS:
1 | var hamNum = parseInt(document.getElementById('hamNumId').value); |
這樣一來,就可以直接使用這兩個變數「hamNum
和cokeNum
」去做「加減乘除」了
接下來,JS 就可以寫
- 設定變數「漢堡、可樂的價格」
- 把「數量」乘以「價格」
hamNum + cokeNum
把「總額相加後」,用.textContent
把值帶入id="totalId"
裡面
1 | document.getElementById('countId').onclick = function(){ |
這樣,計算機功能就完成了!