Tipos primitivos x objetos em JavaScript

jsjsjs

Primeiro, vamos definir o que são tipos primitivos.

Tipos primitivos em JavaScript são

  • strings
  • numbers (Number and BigInt)
  • booleans (true or false)
  • undefined
  • Symbol values

null é um tipo primitivo especial. Se você executar typeof null, receberá 'object' de volta, mas na verdade é um tipo primitivo.

Tudo o que não é um tipo primitivo é um objeto.

Funções também são objetos. Podemos definir propriedades e métodos em funções. typeof retornará 'function', mas o construtor Function deriva do construtor Object.

As grandes diferenças entre tipos e objetos primitivos são

  • tipos primitivos são imutáveis, os objetos têm apenas uma referência imutável, mas seu valor pode mudar com o tempo
  • tipos primitivos são passados ​​por valor. Objetos são passados ​​por referência
  • tipos primitivos são copiados por valor. Objetos são copiados por referência
  • tipos primitivos são comparados por valor. Objetos são comparados por referência

    Se copiarmos um tipo primitivo desta maneira:

let name = 'Flavio'
deixe secondName = name

Agora podemos alterar a variável name, atribuindo-lhe um novo valor, mas secondName ainda mantém o valor antigo, porque foi copiado por valor:

name = 'Roger'
secondName // 'Flavio'

Se tivermos um objeto:

deixe carro = {
  cor amarela'
}

e copiamos para outra variável:

let carro = {
  cor amarela'
}
let outroCar = carro

nesse caso, otherCar aponta para o mesmo objeto que car. Se você definir

car.color = 'azul'

Além disso

anotherCar.color

será 'azul'.

O mesmo funciona para passar objetos para funções e comparar.

Digamos que queremos comparar um carro com outro

anotherCar === carro // verdadeiro

Isso é verdade porque ambas as variáveis ​​apontam exatamente para o mesmo objeto.

Mas se anotherCar fosse um objeto com as mesmas propriedades que carro, compará-los daria um resultado falso:

let carro = {
  cor amarela'
}

let anotherCar = {
  cor amarela'
}

anotherCar === carro // falso
Lista de Posts