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'

對於將物件傳遞給函數以及進行比較,同樣的規則也適用。

假設我們想要比較 caranotherCar

anotherCar === car //true

這是真實的,因為兩個變量指向完全相同的物件。

但如果 anotherCar 是一個具有與 car 相同屬性的物件,則比較它們會得到 false 的結果:

let car = {
 color: 'yellow'
}

let anotherCar = {
 color: 'yellow'
}

anotherCar === car //false