Oltre ai tipi di dati primitivi come number e string, in JavaScript esiste un altro tipo di dati importante chiamato object.
Gli oggetti sono raccolte di coppie chiave-valore.
Per questo motivo, si possono usare allo stesso modo di quelle che in altri linguaggi vengono spesso chiamate mappe o dizionari.
In altri linguaggi, spesso tutti i valori di una mappa devono avere lo stesso tipo di dati.
In JavaScript, invece, è vincolato solo il tipo della chiave: deve essere di tipo string.
I valori all'interno di uno stesso oggetto possono avere tipi diversi.
Possono essere tipi primitivi come i numeri, ma anche array, altri oggetti o persino funzioni.
Questo rende gli oggetti molto versatili, al punto che sono anche elementi chiave della programmazione orientata agli oggetti (OOP) in JavaScript.
Nel seguito ci concentreremo sugli oggetti come raccolte o mappe. Altri casi d'uso degli oggetti saranno trattati in altri concetti, vedi ad esempio Classi.
Un oggetto si crea usando le parentesi graffe. Puoi anche includere direttamente alcune voci. Per farlo, indica prima la chiave, poi due punti e il valore.
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;
},
};
La virgola finale dopo l'ultima voce è opzionale in JavaScript.
Forse ti chiederai perché le chiavi non sono racchiuse tra virgolette anche se dovrebbero essere delle stringhe. Questa è una notazione abbreviata. Se la chiave segue le regole di denominazione per un identificatore JavaScript, puoi omettere le virgolette. Per le chiavi con caratteri speciali nel nome, devi usare la solita notazione delle stringhe.
const obj = {
'1keyStartsWithNumber': '...',
'key/with/slashes': '...',
'key-with-dashes': '...',
'key with spaces': '...',
'#&()[]{}èä樹keyWithSpecialChars': '...',
};
Ci sono due modi per recuperare il valore di una determinata chiave: la notazione con punto e la notazione con parentesi quadre.
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
Usare la notazione con punto come abbreviazione ha la stessa restrizione dell'omettere le virgolette. Funziona solo se la chiave segue le regole di denominazione degli identificatori.
Puoi aggiungere o modificare un valore usando l'operatore di assegnazione =.
Anche in questo caso sono disponibili la notazione con punto e quella con parentesi quadre.
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';
Puoi eliminare una coppia chiave-valore da un oggetto usando la parola chiave delete.
const obj = {
key1: 'value1',
key2: 'value2',
};
delete obj.key1;
delete obj['key2'];
Puoi verificare se una determinata chiave esiste in un oggetto con il metodo hasOwnProperty.
const obj = { greeting: 'hello world' };
obj.hasOwnProperty('greeting');
// => true
obj.hasOwnProperty('age');
// => false
Esiste un ciclo speciale for...in per iterare su tutte le chiavi di un oggetto.
const obj = {
name: 'Ali',
age: 65,
};
for (let key in obj) {
console.log(key, obj[key]);
}
// name Ali
// age 65
Per evitare errori sottili, dovresti sempre presumere che il ciclo for...in visiti le chiavi in un ordine arbitrario.
Inoltre, tieni presente che for...in include nell'iterazione anche le chiavi ereditate.
In questo esercizio, implementerai un modo per tenere traccia dei punteggi più alti del gioco più popolare della tua sala giochi.
Devi implementare 5 funzioni, per lo più legate alla manipolazione di un oggetto che contiene i punteggi più alti.
Crea una funzione createScoreBoard che crea un oggetto che funge da tabellone dei punteggi più alti.
Le chiavi di questo oggetto saranno i nomi dei giocatori, i valori saranno i loro punteggi.
Per motivi di test, vuoi includere direttamente una voce nell'oggetto.
Questa voce iniziale deve consistere in The Best Ever come nome del giocatore e 1000000 come punteggio.
createScoreBoard();
// returns an object with one initial entry
Per aggiungere un giocatore al tabellone dei punteggi più alti, definisci la funzione addPlayer.
Accetta 3 parametri:
La funzione restituisce lo stesso oggetto tabellone dei punteggi che le è stato passato, dopo aver aggiunto il nuovo giocatore.
addPlayer({ 'Dave Thomas': 0 }, 'José Valim', 486373);
// => {'Dave Thomas': 0, 'José Valim': 486373}
Se i giocatori violano le regole della sala giochi, vengono rimossi manualmente dal tabellone dei punteggi più alti.
Definisci removePlayer, che accetta 2 parametri:
Questa funzione deve rimuovere dal tabellone la voce relativa al giocatore indicato e restituire poi il tabellone. Se il giocatore non era presente sul tabellone, non deve succedere nulla al tabellone. Va restituito così com'è.
removePlayer({ 'Dave Thomas': 0 }, 'Dave Thomas');
// => {}
removePlayer({ 'Dave Thomas': 0 }, 'Rose Fanaras');
// => { 'Dave Thomas': 0 }
Se un giocatore termina un'altra partita alla sala giochi, una certa quantità di punti verrà aggiunta al punteggio precedente sul tabellone.
Implementa updateScore, che accetta 3 parametri:
La funzione deve restituire il tabellone dei punteggi dopo che l'aggiornamento è stato eseguito.
updateScore({ 'Freyja Ćirić': 12771008 }, 'Freyja Ćirić', 73);
// => {"Freyja Ćirić", 12771081}
La sala giochi tiene un tabellone dei punteggi separato il lunedì. Alla fine della giornata, ogni giocatore su quel tabellone riceve 100 punti aggiuntivi.
Implementa la funzione applyMondayBonus, che accetta un tabellone dei punteggi.
La funzione aggiunge i punti bonus per ogni giocatore elencato su quel tabellone.
Poi, il tabellone viene restituito.
const scoreBoard = {
'Dave Thomas': 44,
'Freyja Ćirić': 539,
'José Valim': 265,
};
applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.