Sok más nyelvvel ellentétben a JavaScriptben két különböző dolog is jelöli egy (értelmes) érték hiányát.
Van a null és az undefined.
A null primitív értéket szándékos „üres értékként” használjuk bármilyen típusú változóhoz.
let name = null;
// name is intentionally set to "empty" because it is not
// available
Azt, hogy egy változó null-e, a szigorú egyenlőség operátor === segítségével ellenőrizheted.
let name = null;
name === null;
// => true
Az a változó, amelynek nem adtunk értéket,
undefinedtípusú.1
Ez azt jelenti, hogy míg a null egy üres értéket jelöl (de mégiscsak egy értéket), addig az undefined egy érték teljes hiányát jelöli. 🤯
Az undefined többféle helyzetben is megjelenik.
undefined lesz.undefined-et kapsz.undefined.undefined lesz, kivéve, ha az argumentumnak van alapértelmezett értéke.let name;
console.log(name);
// => undefined
Azt, hogy egy változó undefined-e, a szigorú egyenlőség operátor === segítségével ellenőrizheted.
let name;
name === undefined;
// => true
Ha megpróbálsz lekérni egy egymásba ágyazott értéket egy objektumból, de a szülő kulcs nem létezik, a JavaScript hibát dob.
Ennek egyszerű elkerülésére 2020-ban bekerült a nyelvi specifikációba az opcionális láncolás.
Az opcionális láncolás operátorral ?. elérheted, hogy a JavaScript csak akkor próbálja meg elérni az egymásba ágyazott kulcsot, ha a szülő nem null és nem undefined.
Ellenkező esetben undefined-et ad vissza.
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
Vannak olyan helyzetek, amikor alapértelmezett értéket szeretnél alkalmazni, ha egy változó null vagy undefined (de csak akkor).
Ennek kezelésére 2020-ban bevezették a nullish coalescing operátort ??.
Csak akkor adja vissza a jobb oldali operandust, ha a bal oldali operandus null vagy undefined.
Ellenkező esetben a bal oldali operandust adja vissza.
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 (megtekintve: 2021. június 4.).
A te feladatod, hogy egy vidámpark informatikai rendszerének egyes részeit biztosítsd és karbantartsd. Konkrétan a látogatókat és a jegyeket kezelő programért felelsz.
Először létrehozol egy új látogatót a rendszerben. Utána készítesz egy függvényt a jegy visszavonásához. A 3. és 4. feladatban a jegyek nyomon követését segítő rendszeren dolgozol, amely hozzájárul a hamisítás megelőzéséhez. Végül segítesz a rendszert az új jogi követelményekhez igazítani.
Amikor a látogatók először jönnek a vidámparkba, regisztrálniuk kell: be kell írniuk a nevüket és az életkorukat egy terminálba, majd el kell fogadniuk a szerződési feltételeket.
Természetesen jegyet is kell venniük.
Minden jegynek van egy azonosítója, például H32AZ123.
Írj egy createVisitor függvényt, amely három argumentumot fogad.
A függvény egy objektumot adjon vissza, amely ezt az információt tartalmazza.
Az objektum kulcsai name, age és ticketId legyenek.
createVisitor('Verena Nardi', 45, 'H32AZ123');
// => { name: 'Verena Nardi', age: 45, ticketId: 'H32AZ123' }
Amikor az emberek elhagyják a vidámparkot, a jegyük visszavonásra kerül. Ha visszajönnek, új jegyet kell venniük. Hogy a törzsvendégeknek időt spóroljunk, csak egyszer kell regisztrálniuk, és a látogató adatait a későbbi látogatásokhoz is megőrizzük.
Ez azt jelenti, hogy amikor egy látogató elhagyja a parkot, csak a jegyét kell érvényteleníteni, a látogató objektum többi része viszont változatlan marad.
Valósítsd meg a revokeTicket függvényt, amely egy látogató objektumot fogad, a jegy azonosítóját null-ra állítja, majd visszaadja az objektumot.
const visitor = {
name: 'Verena Nardi',
age: 45,
ticketId: 'H32AZ123',
};
revokeTicket(visitor);
// => { name: 'Verena Nardi', age: 45, ticketId: null }
A hamisítás megelőzése érdekében a jegyazonosítók egyediek. Amint egy jegyet kinyomtatnak, az azonosítója kulcsként bekerül a rendszer egyik objektumába, hogy nyomon lehessen követni.
Mielőtt a jegyet eladják egy látogatónak, null értékkel kerül be a jegynyilvántartó objektumba.
Amikor eladják egy látogatónak, értékként a látogató nevét kapja.
Amikor a dolgozóknak kétségük van egy jegy érvényességéről, le kell ellenőrizniük a jegy állapotát a rendszerben.
Valósítsd meg a ticketStatus függvényt, amely a nyilvántartó objektumot és egy jegyazonosítót fogad argumentumként.
A következő eredmények egyikét adja vissza.
'unknown ticket id', ha az azonosító nem található a nyilvántartó objektumban'not sold', ha a jegyet kinyomtatták, de nem adták el'sold to {name}', ahol {name} a látogató neve, ha a jegyet eladtákconst tickets = {
'0H2AZ123': null,
'23LA9T41': 'Verena Nardi',
};
ticketStatus(tickets, 'RE90VAW7');
// => 'unknown ticket id'
ticketStatus(tickets, '0H2AZ123');
// => 'not sold'
ticketStatus(tickets, '23LA9T41');
// => 'sold to Verena Nardi'
Egy idő után visszajelzést kapsz a dolgozóktól, hogy szeretnék, ha a jegy állapota első pillantásra könnyebben érthető lenne. Csak a látogató nevét szeretnék látni, vagy azt, hogy a jegy érvénytelen.
Írj egy simpleTicketStatus függvényt, amely ugyanazokat az argumentumokat fogadja, mint a 3. feladat ticketStatus függvénye.
Ez a függvény csak két különböző eredmény egyikét adja vissza.
'invalid ticket !!!', ha a jegyet még nem adták el, vagy az azonosító nem található a nyilvántartó objektumbanconst tickets = {
'0H2AZ123': null,
'23LA9T41': 'Verena Nardi',
};
simpleTicketStatus(tickets, '23LA9T41');
// => 'Verena Nardi'
simpleTicketStatus(tickets, '0H2AZ123');
// => 'invalid ticket !!!'
simpleTicketStatus(tickets, 'RE90VAW7');
// => 'invalid ticket !!!'
Az új jogi követelmények miatt az újonnan létrehozott látogatóobjektumok mostantól részletes információt is tartalmaznak az „Általános Szerződési Feltételekről” (GTC), amelyeket a felhasználó elfogadott. Alább láthatsz egy példát az új látogatóobjektumra.
A vidámpark pénztárosainak mostantól ellenőrizniük kell, hogy egy látogatónak alá kell-e írnia a GTC egy új verzióját.
Ehhez valósítsd meg a gtcVersion függvényt, amely egy látogató objektumot fogad argumentumként, és visszaadja a GTC verzióját, ha az elérhető.
Ha a verzióinformáció nem érhető el, semmit sem szabad visszaadni.
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
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.