JavaScript 中的基本類型 vs 物件
JavaScript 中的基本類型和物件有哪些主要區別呢?
首先,讓我們定義一下什麼是基本類型。
JavaScript 中的基本類型有:
- 字串 (String)
- 數字 (Number 和 BigInt)
- 布林值 (true 或 false)
- 未定義 (undefined)
- 符號值 (Symbol)
null
是一種特殊的基本類型。如果你執行 typeof null
,會返回 'object'
,但它實際上是一種基本類型。
除了基本類型之外的一切都是物件。
函數也是物件。我們可以在函數上設置屬性和方法。typeof
會返回 'function'
,但函數構造函數是來自於物件構造函數的。
基本類型和物件之間的主要區別有:
- 基本類型是不可變的,物件只有一個不可變的引用,但其值可以隨時間變化
- 基本類型是按值傳遞,物件是按引用傳遞
- 基本類型是按值複製,物件是按引用複製
- 基本類型是按值比較,物件是按引用比較
如果我們這樣複製一個基本類型:
1 | let name = 'Flavio' |
現在,我們可以通過將 name
變量賦予一個新值來更改它,但 secondName
仍然保存著舊值,因為它是按值複製的:
1 | name = 'Roger' |
如果我們有一個物件:
1 | let car = { |
然後將其複製到另一個變量:
1 | let car = { |
在這種情況下,anotherCar
指向與 car
相同的物件。如果你設置:
1 | car.color = 'blue' |
同樣的:
1 | anotherCar.color |
將會是 'blue'
。
對於將物件傳遞給函數以及進行比較,同樣的規則也適用。
假設我們想要比較 car
和 anotherCar
:
1 | anotherCar === car //true |
這是真實的,因為兩個變量指向完全相同的物件。
但如果 anotherCar
是一個具有與 car
相同屬性的物件,則比較它們會得到 false
的結果:
1 | let car = { |
tags: [“primitive types”, “objects”, “JavaScript”]