Loại nguyên thủy so với đối tượng trong JavaScript

Sự khác biệt chính giữa các kiểu và đối tượng nguyên thủy trong JavaScript là gì?


Đầu tiên, hãy định nghĩa các kiểu nguyên thủy là gì.

Các kiểu nguyên thủy trong JavaScript là

  • dây
  • số (Number và BigInt)
  • booleans (đúng hoặc sai)
  • chưa xác định
  • Giá trị ký hiệu

nulllà một kiểu nguyên thủy đặc biệt. Nếu bạn chạytypeof nullbạn sẽ nhận được'object'trở lại, nhưng nó thực sự là một kiểu nguyên thủy.

Mọi thứ không phải là kiểu nguyên thủy đều làvật.

Hàm cũng là đối tượng. Chúng ta có thể đặt các thuộc tính và phương thức trên các hàm.typeofsẽ trở lại'function'nhưng phương thức khởi tạo Hàm dẫn xuất từ phương thức khởi tạo Đối tượng.

Sự khác biệt lớn giữa các kiểu nguyên thủy và các đối tượng là

  • các kiểu nguyên thủy là bất biến, các đối tượng chỉ có một tham chiếu không thay đổi, nhưng giá trị của chúng có thể thay đổi theo thời gian
  • các kiểu nguyên thủy được truyền theo giá trị. Các đối tượng được chuyển qua tham chiếu
  • các kiểu nguyên thủy được sao chép theo giá trị. Các đối tượng được sao chép theo tham chiếu
  • loại nguyên thủy được so sánh theo giá trị. Các đối tượng được so sánh bằng cách tham chiếu

Nếu chúng ta sao chép một kiểu nguyên thủy theo cách này:

let name = 'Flavio'
let secondName = name

Bây giờ chúng ta có thể thay đổinamebiến gán cho nó một giá trị mới, nhưngsecondNamevẫn giữ giá trị cũ, vì nó đã được sao chép theo giá trị:

name = 'Roger'
secondName //'Flavio'

Nếu chúng ta có một đối tượng:

let car = {
  color: 'yellow'
}

và chúng tôi sao chép nó vào một biến khác:

let car = {
  color: 'yellow'
}

let anotherCar = car

trong trường hợp nàyanotherCartrỏ đến cùng một đối tượng nhưcar. Nếu bạn đặt

car.color = 'blue'

cũng thế

anotherCar.color

sẽ là'blue'.

Điều tương tự cũng hoạt động để chuyển các đối tượng đến các hàm và so sánh.

Giả sử chúng tôi muốn so sánhcarđếnanotherCar:

anotherCar === car //true

Điều này đúng vì cả hai biến đều trỏ đến chính xác cùng một đối tượng.

Nhưng nếuanotherCarlà một đối tượng có các thuộc tính giống nhưcar, so sánh chúng sẽ cho mộtfalsekết quả:

let car = {
  color: 'yellow'
}

let anotherCar = { color: ‘yellow’ }

anotherCar === car //false

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: