Objetos são uma das estruturas de dados fundamentais em JavaScript. Eles permitem agrupar valores relacionados (propriedades) e funções (métodos) em uma única entidade, facilitando a organização do código. Diferentemente de arrays, que usam índices numéricos, objetos utilizam chaves nomeadas (strings) para acessar seus valores.

Nesta aula, exploraremos como criar objetos, acessar e modificar suas propriedades usando notação de ponto e colchete, e como adicionar métodos que executam ações. Ao final, você será capaz de modelar dados do mundo real de forma eficiente.

Pares chave-valor

Um objeto é uma coleção de pares chave-valor, onde cada chave é uma string (ou símbolo) e o valor pode ser qualquer tipo de dado JavaScript (número, string, booleano, array, outro objeto, função, etc.). As chaves são únicas dentro do objeto e servem como identificadores para os valores correspondentes.

Para criar um objeto, usamos chaves {} e definimos os pares separados por vírgula. Cada par é escrito como chave: valor. As chaves podem ser escritas sem aspas se forem identificadores válidos (sem espaços, começando com letra, $ ou _), mas podem ser strings literais se necessário.

// Exemplo de objeto com várias propriedades
const pessoa = {
  nome: 'Alice',
  idade: 30,
  'e-mail': 'alice@email.com', // chave com caractere especial
  'data de nascimento': '1994-05-15' // chave com espaço
};

console.log(pessoa); // { nome: 'Alice', idade: 30, 'e-mail': 'alice@email.com', 'data de nascimento': '1994-05-15' }

As chaves 'e-mail' e 'data de nascimento' exigem aspas porque contêm caracteres especiais. É uma boa prática usar nomes de chave sem aspas sempre que possível, seguindo as regras de identificadores JavaScript.

Acesso por ponto e colchete

Existem duas formas principais de acessar valores em um objeto: notação de ponto (.) e notação de colchetes ([]). A notação de ponto é mais concisa e legível, mas só funciona com chaves que são identificadores válidos. A notação de colchetes é mais flexível, permitindo chaves com espaços, caracteres especiais ou dinâmicas (usando variáveis).

const carro = {
  marca: 'Toyota',
  modelo: 'Corolla',
  ano: 2022
};

// Acesso por ponto
console.log(carro.marca); // 'Toyota'
console.log(carro.modelo); // 'Corolla'

// Acesso por colchete
console.log(carro['ano']); // 2022

// Acesso com chave dinâmica
const chave = 'marca';
console.log(carro[chave]); // 'Toyota'

// Acesso a chave com espaço (precisa de colchete)
const obj = { 'nome completo': 'João Silva' };
console.log(obj['nome completo']); // 'João Silva'

// Atribuição de novas propriedades
carro.cor = 'preto'; // adiciona cor
carro['ano'] = 2023; // modifica ano
console.log(carro); // { marca: 'Toyota', modelo: 'Corolla', ano: 2023, cor: 'preto' }

A notação de colchete é essencial quando o nome da chave é armazenado em uma variável, vem de uma entrada do usuário ou contém caracteres especiais. A notação de ponto é preferida por sua simplicidade, mas ambas são igualmente válidas.

Métodos

Métodos são funções que são propriedades de um objeto. Eles permitem que o objeto tenha comportamentos associados aos seus dados. Para definir um método, atribuímos uma função a uma chave do objeto. Dentro do método, podemos acessar outras propriedades do objeto usando a palavra-chave this, que se refere ao próprio objeto.

const calculadora = {
  soma: function(a, b) {
    return a + b;
  },
  subtracao: function(a, b) {
    return a - b;
  },
  // Shorthand (ES6) - forma mais concisa
  multiplicacao(a, b) {
    return a * b;
  }
};

console.log(calculadora.soma(5, 3)); // 8
console.log(calculadora.subtracao(10, 4)); // 6
console.log(calculadora.multiplicacao(6, 7)); // 42

O uso de this é comum em métodos para referenciar outras propriedades do objeto. Por exemplo:

const pessoa = {
  nome: 'Carlos',
  idade: 25,
  apresentar() {
    console.log(`Olá, meu nome é ${this.nome} e tenho ${this.idade} anos.`);
  }
};

pessoa.apresentar(); // 'Olá, meu nome é Carlos e tenho 25 anos.'

Métodos podem receber parâmetros, retornar valores e interagir com outras partes do código. Eles são fundamentais para a programação orientada a objetos em JavaScript.

Boas práticas

  • Use nomes de chave descritivos e consistentes (camelCase é comum).
  • Prefira notação de ponto para legibilidade, a menos que precise de flexibilidade.
  • Evite modificar objetos de forma inesperada; considere usar Object.freeze() ou imutabilidade.
  • Métodos devem ser coerentes com o objeto; evite funções que não se relacionam com os dados.

Referências

Exercícios

  1. Crie um objeto chamado livro com as propriedades: titulo, autor, anoPublicacao e genero. Atribua valores de sua escolha e exiba o objeto no console.
  2. ✓ Resposta:
    const livro = {
      titulo: 'O Senhor dos Anéis',
      autor: 'J.R.R. Tolkien',
      anoPublicacao: 1954,
      genero: 'Fantasia'
    };
    console.log(livro);
  3. Acesse a propriedade autor do objeto livro usando notação de ponto e notação de colchete. Exiba ambos os resultados.
  4. ✓ Resposta:
    console.log(livro.autor); // notação de ponto
    console.log(livro['autor']); // notação de colchete
  5. Adicione um método chamado descricao ao objeto livro que retorne uma string no formato: "O livro [titulo] foi escrito por [autor] em [anoPublicacao]." Teste o método.
  6. ✓ Resposta:
    livro.descricao = function() {
      return `O livro ${this.titulo} foi escrito por ${this.autor} em ${this.anoPublicacao}.`;
    };
    console.log(livro.descricao());
  7. Crie um objeto aluno com propriedades: nome, idade, curso e um método exibirDados que exiba todas as propriedades no console.
  8. ✓ Resposta:
    const aluno = {
      nome: 'Maria',
      idade: 22,
      curso: 'Engenharia',
      exibirDados() {
        console.log(`Nome: ${this.nome}, Idade: ${this.idade}, Curso: ${this.curso}`);
      }
    };
    aluno.exibirDados();
  9. Utilizando notação de colchete, adicione uma nova propriedade matricula ao objeto aluno com valor '2024001'. Em seguida, exiba o objeto.
  10. ✓ Resposta:
    aluno['matricula'] = '2024001';
    console.log(aluno);