JavaScript的資料型別

資料型別

大多數的程式語言都有自身的資料型別,而在 JavaScript 中又分為原生值以及物件,這兩大類。

原生值

原生值代表著我們不能改變這個值得本身,然而除了物件外,所有的值都是原生值。

像對於定義一個變數而言,我們僅能將這個變數賦予另一個值,但卻不能把這個值給改變。

而在 JavaScript 內總共有 7 個原生值的型態:

字串

藉由文字資料是用來表示字串型別,上述描述的,儘管我們賦予某個變數為另一個值,

這也不代表我們將這個值改變,我們只是藉由指定讓他賦予另一個值。

例如:

1
2
let name = "Arance";
name = "Orange";

賦予 name 變數的值為 Orange,但本身的『Arance』卻沒有變動。

對於字串而言,索引值起始值為 0,每一個字站一個位置,

然而肉眼看見的第一個位置(第一個元素)表示為第 0 位。

儘管我們藉由substr() 將字串取出,而使用 concat()+ 將字串串接起來,

本身的值也不會改變,這就是原生值的概念。

數字

不論是整數或是浮點數都是原生值,更準確的說 -253-1 至 253-1 之間的數。

然而在 JavaScript 中, +Infinity-InfinityNaN,這都是數字型別。

註:NaN => Not a Number

BigInt

由於 253-1 為 9007199254740991,或許會用到更大的數。

此時我們就可以藉由 BigInt,可以必免一些問題。與數字型別一樣可以使用運算子。

但不可以拿 BigInt 與數字型別的值交互使用。

布林值

布林值只有兩個值,不是true就是false

Undefined

undefined 的型別,本身是由於某個變數沒有宣告而使用,或是宣告了但卻沒賦予值。

Null

null 與 undefined 很容易搞混,undefined 主要是變數還沒有定義,而 null 是賦予這個變數為 null 這一個值。

Symbol

Symbol 主要會搭配物件而使用,而作為物件的 key。

1
const obj = { key: value };

物件

除了 7 個原生值之外,剩下存在至 JavaScript 當中都是物件。

像是 Array 以及 Function 都是物件。

如何判斷變數型別?

究竟要怎麼判斷一個變數的資料型別哪?

我們藉由typeof這個方法。

1
2
3
4
5
6
7
8
typeof 123; // number
typeof "aaa"; // string
typeof []; // object
typeof { nn: 123 }; // object
typeof true; // boolean
typeof typeof 123; // string ;因為typeof('123')為number,而typeof('number')就是String
typeof undefined; // undefined
typeof NaN; // number

這邊特別值得一提的是,對於 typeof null 回傳值竟然是 object,

null 這個原生值型態,很多人其實認為這一點要修改,

不過目前為止 ES6 對於這仍然是沒有要更動的,

畢竟可能現在才做改變,有些人的程式碼如果有使用到的話,

就會被影響到。


參考資料:

維基百科 - 資料型態

MDN - JavaScript 的資料型別與資料結構

ECMAScript