在JavaScript中,原始类型和对象的主要区别是什么?

56 阅读2分钟

在JavaScript中,原始类型和对象的主要区别是什么?

首先,我们来定义一下什么是原始类型。

JavaScript中的原始类型有

  • 字符串
  • 数字(Number和BigInt)
  • 布尔(真或假)
  • 未定义
  • 符号值

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 相同的对象。如果你设置

将是'blue'

同样的方法也适用于向函数传递对象,以及进行比较。

假设我们想将caranotherCar 进行比较。

anotherCar === car //true

这是真的,因为两个变量都指向完全相同的对象。

但是如果anotherCar 是一个与car 具有相同属性的对象,那么比较它们会得到一个false 的结果。

let car = {
  color: 'yellow'
}

let anotherCar = {
  color: 'yellow'
}

anotherCar === car //false