Além dos tipos de dados primitivos como number e string, existe outro tipo de dados importante em JavaScript chamado object.
Objetos são coleções de pares de chave-valor.
Assim, eles podem ser usados da mesma forma que o que costuma ser chamado de mapas ou dicionários em outras linguagens.
Em outras linguagens, todos os valores de um mapa geralmente precisam ter o mesmo tipo de dados.
Em JavaScript, apenas o tipo da chave é restrito: ela precisa ser uma string.
Os valores dentro de um objeto podem ter tipos diferentes.
Eles podem ser tipos primitivos como números, mas também arrays, outros objetos ou até funções.
Isso torna os objetos muito versáteis, de modo que também são entidades centrais para a programação orientada a objetos (POO) em JavaScript.
A seguir, vamos nos concentrar em objetos como coleções ou mapas. Outros casos de uso de objetos serão abordados em outros conceitos; veja, por exemplo, Classes.
Você cria um objeto usando chaves. Você também pode incluir algumas entradas diretamente. Para isso, informe a chave primeiro, seguida de dois-pontos e do valor.
const emptyObject = {};
const obj = {
favoriteNumber: 42,
greeting: 'Hello World',
useGreeting: true,
address: {
street: 'Trincomalee Highway',
city: 'Batticaloa',
},
fruits: ['melon', 'papaya'],
addNumbers: function (a, b) {
return a + b;
},
};
A vírgula final após a última entrada é opcional em JavaScript.
Você pode se perguntar por que as chaves não estão envolvidas por aspas, embora devessem ser strings. Essa é uma notação abreviada. Se a chave seguir as regras de nomenclatura de um identificador JavaScript, você pode omitir as aspas. Para chaves com caracteres especiais no nome, você precisa usar a notação de string usual.
const obj = {
'1keyStartsWithNumber': '...',
'key/with/slashes': '...',
'key-with-dashes': '...',
'key with spaces': '...',
'#&()[]{}èä樹keyWithSpecialChars': '...',
};
Há duas maneiras de obter o valor de uma determinada chave: notação de ponto e notação de colchetes.
const obj = { greeting: 'hello world' };
obj.greeting;
// => hello world
obj['greeting'];
// => hello world
// Bracket notation also works with variables.
const key = 'greeting';
obj[key];
// => hello world
Usar a notação de ponto como forma abreviada tem a mesma restrição que omitir as aspas. Ela só funciona se a chave seguir as regras de nomenclatura de identificadores.
Você pode adicionar ou alterar um valor usando o operador de atribuição =.
Novamente, há notações de ponto e de colchetes disponíveis.
const obj = { greeting: 'hello world' };
obj.greeting = 'Hi there!';
obj['greeting'] = 'Welcome.';
obj.newKey1 = 'new value 1';
obj['new key 2'] = 'new value 2';
const key = 'new key 3';
obj[key] = 'new value 3';
Você pode excluir um par chave-valor de um objeto usando a palavra-chave delete.
const obj = {
key1: 'value1',
key2: 'value2',
};
delete obj.key1;
delete obj['key2'];
Você pode verificar se uma determinada chave existe em um objeto com o método hasOwnProperty.
const obj = { greeting: 'hello world' };
obj.hasOwnProperty('greeting');
// => true
obj.hasOwnProperty('age');
// => false
Há um laço for...in especial para iterar sobre todas as chaves de um objeto.
const obj = {
name: 'Ali',
age: 65,
};
for (let key in obj) {
console.log(key, obj[key]);
}
// name Ali
// age 65
Para evitar erros sutis, você deve sempre assumir que o laço for...in visita as chaves em uma ordem arbitrária.
Além disso, lembre-se de que o for...in inclui chaves herdadas em sua iteração.
Neste exercício, você vai implementar uma forma de acompanhar os recordes do jogo mais popular do fliperama da sua região.
Você tem 5 funções para implementar, a maioria relacionada à manipulação de um objeto que guarda os recordes.
Crie uma função createScoreBoard que cria um objeto que serve como placar de recordes.
As chaves desse objeto serão os nomes dos jogadores e os valores serão as pontuações deles.
Para fins de teste, você quer incluir uma entrada diretamente no objeto.
Essa entrada inicial deve conter The Best Ever como nome de jogador e 1000000 como pontuação.
createScoreBoard();
// returns an object with one initial entry
Para adicionar um jogador ao placar de recordes, defina a função addPlayer.
Ela aceita 3 parâmetros:
A função retorna o mesmo objeto de placar que foi passado, depois de adicionar o novo jogador.
addPlayer({ 'Dave Thomas': 0 }, 'José Valim', 486373);
// => {'Dave Thomas': 0, 'José Valim': 486373}
Se os jogadores violarem as regras do fliperama, eles são removidos manualmente do placar de recordes.
Defina removePlayer, que recebe 2 parâmetros:
Essa função deve remover a entrada do jogador em questão do placar e retornar o placar em seguida. Se o jogador não estava no placar desde o início, nada deve acontecer com o placar. Ele deve ser retornado como está.
removePlayer({ 'Dave Thomas': 0 }, 'Dave Thomas');
// => {}
removePlayer({ 'Dave Thomas': 0 }, 'Rose Fanaras');
// => { 'Dave Thomas': 0 }
Se um jogador termina outro jogo no fliperama, uma certa quantidade de pontos será adicionada à pontuação anterior no placar.
Implemente updateScore, que recebe 3 parâmetros:
A função deve retornar o placar depois que a atualização for feita.
updateScore({ 'Freyja Ćirić': 12771008 }, 'Freyja Ćirić', 73);
// => {"Freyja Ćirić", 12771081}
O fliperama mantém um placar separado às segundas-feiras. No fim do dia, cada jogador nesse placar ganha 100 pontos adicionais.
Implemente a função applyMondayBonus, que aceita um placar.
A função adiciona os pontos de bônus para cada jogador listado nesse placar.
Depois, o placar é retornado.
const scoreBoard = {
'Dave Thomas': 44,
'Freyja Ćirić': 539,
'José Valim': 265,
};
applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.