iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

重新開始 JavaScript系列 第 12

[Day12] JavaScript 的動態型別

  • 分享至 

  • xImage
  •  

我們可以在變數做宣告時,是否綁定型別來判定程式語言是動態型別或是靜態型別,而兩者區別如下:

動態型別 vs 靜態型別

靜態型別

靜態型別在編譯時期,要明確定義變數的型別,先確認並檢查型別,到了執行階段時,就不能隨意更換型別,否則會發生錯誤,例如:Java、C#...

動態型別

動態型別在編譯時期,不需要先定義變數的型別,等到了執行階段才會確定型別,且在執行階段型別也可不斷轉換,例如:JavaScript...

JavaScript - 動態型別

接下來以 JavaScript 來看動態型別的特性:

基礎範例

在創造階段時,變數 nickName 並未先定義型別,要等到執行階段時,才會確定型別,所以值得本身就具備型別,而我們是把值賦予到變數上,變數得型別是來自於值的

// 1.創造階段
var nickName;

// 2.執行階段
nickName = 'Carol';

console.log(typeof nickName); // string
console.log(typeof 'Carol'); // string

型別轉換

動態型別的型別是可以做更換的,變數 data 被賦予數字到變數上,是數字型別,後被賦予字串的值,變成字串型別

var data = 1;

console.log(typeof data); // numbar

data = '一個字';

console.log(typeof data); // string

型別轉換的陷阱

我們必須先了解在執行程式碼的過程中,會做怎樣的型別變化,不然會落入型別轉換的陷阱,型別轉換又分為 2 種 - 顯性轉換隱性轉換

顯性轉換

當變數的值直接被賦予另一個型別的值,稱為顯性轉換

var data = '一個字';
console.log(typeof data); // string
data = true;
console.log(typeof data); // boolean

隱性轉換 (Explicit conversion)

在隱性轉換中,是來自 JavaScript 運算過程中的型別變化

範例1

將一個數字型別加上任一個字串,會轉換成字串型別

變數 data 原是實體藍色 1,為數字型別,加上一個字串後,轉為實體黑色 1一個字,為字串型別

var data = 1;
console.log(data); // 1
console.log(typeof data); // numbar

data = data + '一個字';
console.log(data); // 1一個字
console.log(typeof data); // string

範例2

乘法會將為字串型別的數字轉為數字型別

變數 data 原是實體黑色 1,為字串型別,因使用乘法後,轉為實體藍色 10,為數字型別

var data = '1';
console.log(data); // 1
console.log(typeof data); // string

data = data * 10;
console.log(data); // 10
console.log(typeof data); // number

參考文獻 (Implicit conversion)

六角學院 - JavaScript 核心篇


上一篇
[Day11] 陳述式與表達式
下一篇
[Day13] JavaScript 的原始型別
系列文
重新開始 JavaScript32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言