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