iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0
Modern Web

教練我想學 JavaScript 系列 第 9

Day 9 JavaScript 型別裡的純值

讓我們來講講另一個概念,
JavaScript 中的型別,
Javascript 很特殊,不同於其他你可能正在使用的程式語言,
特別是在變數的資料和型別的部分,
以及 JavaScript 處理它們的方式,

我先說明一個描述 JavaScript 處理型別方式的名詞,
它叫做「動態型別」,
意思是你不需要告訴 JavaScript 你的變數是何種類型的資料,
你不需要在程式裡寫出來,
相反地,它會在執行程式時自動知道,
所以當你執行程式時,一個變數可以在不同時候擁有不同型別,
因為型別都是在執行時才知道的,
例如,你在其他程式語言像是 Java 或 C#, 它們用一個叫做「靜態型別」的方式處理,
這代表你必須在一開始就告訴編譯器你的變數是什麼資料型別,
所以你可能會有一個關鍵字,
像是「 bool 」去表示這個變數的型別是布林,可能是 True 或 False,
如果你將其他型別的值放進這個變數,
就會得到 error:

圖片來源:JavaScript 全攻略:克服 JS 的奇怪部分課程第 3 節講座 19 影片截圖

但 JavaScript 不是這樣,
JavaScript 是動態型別的,
代表沒有關鍵字宣告變數的型別,
例如,我們只宣告 var(變數),然後當程式執行時,
它會依據你指派給變數的值決定要給這個變數什麼型別,
你也可以更改型別,
我可以寫這三行程式碼,而沒有錯誤

圖片來源:JavaScript 全攻略:克服 JS 的奇怪部分課程第 3 節講座 19 影片截圖

這時候它會知道你是要布林型別,
而 'yep' 就是字串型別,
然後我在給變數一個1的值它就會知道這是數值型別,
所以 JavaScript 是動態型別的, 在執行時它會自動判斷變數型別,
這是相當強大的,
但如果你不瞭解 JavaScript 如何處理動態型別 它也可能會造成一些問題,

純值(Primitive Types)

在我們深入瞭解動態型別如何運作和其優缺點之前我們需要講一些 JavaScript 可以存進變數的資料的型別,
在 JavaScript 中你不需要直接宣告變數型別,
但 JavaScript 有六種純值(primitive types,或稱基本型別),

純值是什麼意思?
純值是一種資料的型別,表示一個值,
換句話說, 不是物件,
因為請記得, 物件是名稱/值配對的組合,
而基本型別,只是一個值,
JavaScript 有六種基本型別,
讓我一一說明這些純值,

第一種純值是undefined.
我們之前或多或少講過它,
undefined 表示還不存在,
這是 JavaScript 給所有變數的初始值,
它會一直是 undefined 直到你給定變數一個值,
所以你不應該用它來設定值,
你不應該設定一個變數等於 undefined ,
這會表示還未設定任何值,
但你可以測試看看

第二種純值是 null.
null 也表示不存在,
但這個比較適合給你使用來表示一變數沒有值,
所以別用 undefined 你可以用 null,

第3種是 Boolean.
程式設計師都很熟悉,
用來判斷條件成立與否,
在 JavaScript 直接用 true 或 false 表示,

第四種純值是 Number
在 JavaScript, 其實只有一種數值型態 叫作 Number,
它是浮點數 表示一定有小數點跟在後面,
不像其他程式語言,可能有整數型態或其他特定的數值型態,
JavaScript 只有一種,
你可以假裝這是整數和其他數字型別,
但其實叫作 Number ,
這是一個浮點數,
這會讓數學有點奇怪,
在 JavaScript 中數值的運算時常容易與預期不一樣,要非常小心,

第五種型別是 String
這是另一個 JavaScript 中的純值,
這是一連串的字符所組成 單引號和雙引號都可以來表示字串,
在某些程式語言,處理字串會比一連串的字符更複雜,
但在 JavaScript, 字串被視為純值,

最後第六種是 Symbol,
這是在 ES6 新推出的純值,
ES6 已經非常廣泛的被使用,
Symbol 的部份可參考此連結

這就是 JavaScript 的六種純值(基本型別)
undefined, null, Boolean, Number, String, 和 Symbol.

我們需要先瞭解純值,
還有知道要處理的是動態型別,
這表示它會立刻知道變數的型別,
這是瞭解JavaScript的關鍵.


上一篇
Day 8 關於非同步回呼
下一篇
Day 10 運算子
系列文
教練我想學 JavaScript 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言