JavaScript內建型別
- 資料型態與資料結構
-
- 動態型別
- 資料型態
- 原始值
- 物件
-
- 屬性
-
- 資料屬性
- 訪問器屬性
- 「標準」物件和函式
-
- 內建物件
- typeof
-
- 原理
- 安全防範機制
- JavaScript的型別、值、形態轉換
注意:當前部落格根據ECMAScript 6版本進行學習。
資料型態與資料結構
參考網址:JavaScript資料型態與資料結構
動態型別
JavaScript是一種弱型別/動態語言,不用提前宣告變數的型別。在程式執行過程中,型別會被自動確定。
1 2 3 | var foo = 42; // foo is a Number now foo = "bar"; // foo is a String now foo = true; // foo is a Boolean now |
資料型態
截止至今,ECMAScript標準定義了9種資料型態
- 原始型別
- undefined:
typeof instance === "undefined" - Boolean:
typeof instance === "boolean" - Number:
typeof instance === "number" - String:
typeof instance === "string「 - BigInt:
typeof instance === "bigint" - Symbol :typeof instance === 「symbol」
- undefined:
- null
- null:
typeof instance === "object"
- null:
- Object
- object:
typeof instance === "object"
任何 constructed 物件例項的特殊非資料結構型別,也用做資料結構:new Object,new Array,new Map,new Set,new WeakMap,new WeakSet,new Date,和幾乎所有透過 new keyword 建立的東西。
- object:
- Function
- Function:
typeof instance === "function"
非資料結構,每個 Function 建構器都由 Object 建構器派生
- Function:
原始值
除 Object 以外的所有型別都是不可變的(值本身無法被改變)。
- 布林型別:布林表示一個邏輯實體,可以有兩個值:true 和 false。
- Null 型別:Null 型別衹有一個值: null。
- Undefined型別:一個沒有被賦值的變數會有預設值undefined。
- 數值型別:根據 ECMAScript 標準,JavaScript 中衹有一種數值型別:基於 IEEE 754 標準的雙精度 64 位二進位制格式的值(-(2(53) -1) 到 2(53) -1)。它並沒有為整數給出一種特定的型別。除了能夠表示浮點數外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數值,Not-a-Number)。
- BigInt型別:BigInt型別是 JavaScript 中的一個基礎的數實值型別,可以用任意精度表示整數。使用 BigInt,您可以安全地儲存和操作大整數,甚至可以超過數值的安全整數限制。BigInt是透過在整數末尾附加 n 或呼叫建構函式來建立的。
- 字串型別:JavaScript的字串型別用於表示文字資料。它是一組16位的無符號整數值的「元素」。
- 符號型別:符號(Symbols)是ECMAScript 第6版新定義的。符號型別是唯一的並且是不可修改的, 並且也可以用來作為Object的key的值。
注意:JavaScript的字串是不可更改的。
物件
在電腦科學中,物件值記憶體中可以被標識符引用的一塊區域
屬性
- 在 Javascript 里,物件可以被看作是一組屬性的集合。用物件字面量語法來定義一個物件時,會自動初始化一組屬性。
- ECMAScript定義的物件中有兩種屬性:資料屬性和訪問器屬性。
資料屬性
資料屬性是鍵值對,並且每個資料屬性擁有下列屬性:

訪問器屬性
訪問器屬性有一個或兩個訪問器函式 (get 和 set) 來存取數值,並且有以下屬性:

注意:這些屬性衹有 JavaScript 引擎才用到,因此你不能直接訪問它們。所以屬性被放在兩對方括弧中,而不是一對。
「標準」物件和函式
JavaScript物件是鍵值之間的對映。
- 鍵:一個字串(或Symbol)
- 值:任意型別的值
函式時一個福袋可悲呼叫功能的常規物件
內建物件
- 日期
- 陣列(有序集):一種使用整數作為鍵(integer-key-ed)屬性和長度(length)屬性之間關聯的常規物件
- 型別陣列(有序集):提供了一個基本的二進位制資料緩衝區的類陣列檢視表

- Maps/WeakMap(鍵控集):把一個值和物件關聯起來,區別在於maps的鍵是可列舉的,允許垃圾收集器調校後面的列舉。
- Sets/WeakSets(鍵控集):表示一組物件
- JSON(結構化資料):一種輕量級的資料交換格式
- JavaScript標準庫…
typeof
原理
不同的物件在底層都表示為二進位制,
在 JavaScript 中二進位制前三位都為 0 的話會被判斷為 object 型別, null 的二進位製表示是全 0, 自然前三位也是 0, 所以執行 typeof 時會回傳「object」。
注意:
- javascript 中的 null:既是物件,又不是物件
1 2 3 | typeof null === 'object'; null instanceof Object === false null instanceof null // Uncaught TypeError: Right-hand side of 'instanceof' is not an object |
JavaScript的最初版本中,使用的32位系統,低位儲存的變數型別訊息:
- 000:物件
- 1:整數
- 010:浮點數
- 100:字串
- 110:布林
- undefined:用 - (?2^30)表示。
- null:對應機器碼的 NULL 指標,一般是全零。
安全防範機制
1 2 3 | var a; // a為undefined,b為undeclared typeof a; // 'underfined' typeof b; // 'underfined' |
JavaScript的型別、值、形態轉換

