A differenza di molti altri linguaggi, in JavaScript ci sono due entità diverse che rappresentano l'assenza di un valore (significativo): null e undefined.
Il valore primitivo null viene usato come «valore vuoto» intenzionale per variabili di qualsiasi tipo.
let name = null;
// name is intentionally set to "empty" because it is not
// available
Puoi verificare se una variabile è null usando l'operatore di uguaglianza stretta ===.
let name = null;
name === null;
// => true
Una variabile a cui non è stato assegnato un valore è di tipo
undefined.1
Questo significa che mentre null rappresenta un valore vuoto (ma pur sempre un valore), undefined rappresenta l'assenza totale di un valore. 🤯
undefined compare in contesti diversi.
undefined.undefined.undefined.undefined, a meno che quell'argomento non abbia un valore predefinito.let name;
console.log(name);
// => undefined
Puoi verificare se una variabile è undefined usando l'operatore di uguaglianza stretta ===.
let name;
name === undefined;
// => true
Se provi a recuperare un valore annidato in un oggetto ma la chiave genitore non esiste, JavaScript genera un errore.
Per evitarlo facilmente, il concatenamento opzionale è stato aggiunto alla specifica del linguaggio nel 2020.
Con l'operatore di concatenamento opzionale ?. puoi assicurarti che JavaScript provi ad accedere alla chiave annidata solo se il genitore non è null o undefined.
Altrimenti, viene restituito undefined.
const obj = {
address: {
street: 'Trincomalee Highway',
city: 'Batticaloa',
},
};
obj.address.zipCode;
// => undefined
obj.residence.street;
// => TypeError: Cannot read property 'street' of undefined
obj.residence?.street;
// => undefined
Ci sono situazioni in cui vuoi applicare un valore predefinito nel caso in cui una variabile sia null o undefined (ma solo in quel caso).
Per risolvere questo problema, l'operatore di coalescenza nullish ?? è stato introdotto nel 2020.
Restituisce l'operando di destra solo quando l'operando di sinistra è null o undefined.
Altrimenti, viene restituito l'operando di sinistra.
let amount = null;
amount = amount ?? 1;
// => 1
amount = 0;
amount = amount ?? 1;
// => 0
[1] Undefined, MDN. (2021). https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined (consultato il 4 giugno 2021).
Il tuo compito è fornire e mantenere parti del sistema informatico di un parco divertimenti. In particolare, sei responsabile del programma che gestisce i visitatori e i biglietti.
Per prima cosa, creerai un nuovo visitatore nel sistema. Poi fornirai una funzione per revocare un biglietto. Nei compiti 3 e 4 lavorerai sul sistema di tracciamento dei biglietti che aiuta a prevenire le contraffazioni. Infine, aiuterai ad adattare il sistema ai nuovi requisiti legali.
Quando i visitatori arrivano al parco divertimenti per la prima volta, devono registrarsi inserendo il proprio nome e la propria età in un terminale e accettando i termini e le condizioni.
Naturalmente, devono anche comprare un biglietto.
Ogni biglietto ha un identificatore come H32AZ123.
Scrivi una funzione createVisitor che accetta tre argomenti.
La funzione deve restituire un oggetto che contiene queste informazioni.
Le chiavi dell'oggetto devono chiamarsi name, age e ticketId.
createVisitor('Verena Nardi', 45, 'H32AZ123');
// => { name: 'Verena Nardi', age: 45, ticketId: 'H32AZ123' }
Quando le persone lasciano il parco divertimenti, il loro biglietto viene revocato. Se tornano, devono comprarne uno nuovo. Per far risparmiare un po' di tempo ai visitatori abituali, devono registrarsi una sola volta e le informazioni sul visitatore vengono conservate per le visite successive.
Ciò significa che quando un visitatore lascia il parco, va invalidato solo il suo biglietto, mentre il resto dell'oggetto visitatore deve rimanere uguale.
Implementa la funzione revokeTicket che accetta un oggetto visitatore, imposta l'identificatore del biglietto su null e infine restituisce l'oggetto.
const visitor = {
name: 'Verena Nardi',
age: 45,
ticketId: 'H32AZ123',
};
revokeTicket(visitor);
// => { name: 'Verena Nardi', age: 45, ticketId: null }
Per prevenire le contraffazioni, gli identificatori dei biglietti sono univoci. Una volta stampato un biglietto, il suo identificatore viene aggiunto come chiave in un oggetto nel sistema, in modo da poterlo tracciare.
Prima che il biglietto venga venduto a un visitatore, viene memorizzato con il valore null nell'oggetto di tracciamento dei biglietti.
Quando viene venduto a un visitatore, come valore viene assegnato il nome del visitatore.
Quando i dipendenti hanno dubbi sulla validità di un biglietto, devono controllarne lo stato nel sistema.
Implementa una funzione ticketStatus che accetta l'oggetto di tracciamento e un identificatore di biglietto come argomenti.
Deve restituire uno dei seguenti risultati.
'unknown ticket id' se l'identificatore non è stato trovato nell'oggetto di tracciamento'not sold' se il biglietto è stato stampato ma non venduto'sold to {name}' dove {name} è il nome del visitatore se il biglietto è stato vendutoconst tickets = {
'0H2AZ123': null,
'23LA9T41': 'Verena Nardi',
};
ticketStatus(tickets, 'RE90VAW7');
// => 'unknown ticket id'
ticketStatus(tickets, '0H2AZ123');
// => 'not sold'
ticketStatus(tickets, '23LA9T41');
// => 'sold to Verena Nardi'
Dopo un po', ricevi un riscontro dai dipendenti: vogliono che lo stato del biglietto sia più facile da capire a colpo d'occhio. Vogliono vedere soltanto il nome del visitatore oppure che il biglietto non è valido.
Scrivi una funzione simpleTicketStatus che accetta gli stessi argomenti di ticketStatus nel compito 3.
Questa funzione restituisce solo uno tra due risultati diversi.
'invalid ticket !!!' se il biglietto non è ancora stato venduto o l'identificatore non è stato trovato nell'oggetto di tracciamentoconst tickets = {
'0H2AZ123': null,
'23LA9T41': 'Verena Nardi',
};
simpleTicketStatus(tickets, '23LA9T41');
// => 'Verena Nardi'
simpleTicketStatus(tickets, '0H2AZ123');
// => 'invalid ticket !!!'
simpleTicketStatus(tickets, 'RE90VAW7');
// => 'invalid ticket !!!'
A causa dei nuovi requisiti legali, gli oggetti visitatore appena creati ora contengono anche informazioni dettagliate sulle «Condizioni generali di contratto» (GTC) che l'utente ha accettato. Qui sotto puoi vedere un esempio del nuovo oggetto visitatore.
Ora i cassieri del parco divertimenti devono controllare se un visitatore deve firmare una nuova versione delle GTC.
Per questo, implementa una funzione gtcVersion che accetta un oggetto visitatore come argomento e restituisce la versione delle GTC, se disponibile.
Se le informazioni sulla versione non sono disponibili, non va restituito nulla.
const visitorNew = {
name: 'Verena Nardi',
age: 45,
ticketId: 'H32AZ123',
gtc: {
signed: true,
version: '2.1',
},
};
gtcVersion(visitorNew);
// => '2.1'
const visitorOld = {
name: 'Verena Nardi',
age: 45,
ticketId: 'H32AZ123',
};
gtcVersion(visitorOld);
// => undefined
Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.