A JavaScriptben az értékek különböző típusúak lehetnek. Egy változó típusát explicit típuskonverzióval lehet megváltoztatni. Ezen kívül a JavaScript automatikus típuskonverziót (implicit típuskonverziót) is végez, amikor a kontextus megkívánja.
A JavaScriptben, sok más nyelvvel ellentétben, nincs olyan szerkezet, amellyel egy értéket egy (másik) típusba lehetne átalakítani, helyette viszont néhány beépített segédeszköz használható.
A legfontosabbak: a Boolean, a Number és a String függvényként használható ahhoz, hogy egy értéket a megfelelő típussá alakíts.
A Boolean(value) segítségével bármilyen értéket logikai értékké alakíthatsz.
Van egy rögzített értékhalmaz, az úgynevezett falsy értékek, amelyek false-ra konvertálódnak.
A legfontosabbak: a false, a 0, az üres string, a null, az undefined és a NaN falsy.
Minden más értékre a Boolean true-t ad vissza.
Ezeket az értékeket truthy-nak nevezzük.
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
Figyeld meg, hogy a leírt szabályok miatt a '0', a 'false', a [] és a {} truthy érték a JavaScriptben.
A Number(value) segítségével egy értéket számmá alakíthatsz.
A string elején és végén álló szóközök figyelmen kívül maradnak, az üres string pedig 0-vá konvertálódik.
Ha nem primitív értéket vagy olyan stringet próbálsz átalakítani, amely nem számot reprezentál, az eredmény NaN (Not-A-Number).
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
A String(value) segítségével egy értéket stringgé alakíthatsz.
Primitív értékek esetén pont azt kapod, amire számítasz.
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
Tömbök esetén a String függvény minden elemre alkalmazza a stringkonverziót, majd az eredményeket vesszővel fűzi össze.
A join metódust magad is alkalmazhatod, például hogy testre szabd az elválasztót.
Figyeld meg, hogy ezekben az esetekben a null és az undefined üres stringgé konvertálódik.
String([42, null, true, 'abc']);
// => '42,,true,abc'
Objektumok esetén a String alapértelmezés szerint egy semmitmondó szöveget ad vissza.
String({ key: 'value' });
// => '[object Object]'
Bizonyos kontextusokban a JavaScript automatikusan átalakít egy értéket egy másik adattípusra, mielőtt kiértékelne egy utasítást. Ezt az implicit átalakítást automatikus típuskonverziónak nevezzük.
Amikor egy nem logikai értéket logikai kontextusban használunk, a JavaScript ugyanazokat a szabályokat alkalmazza, mint a Boolean függvény, hogy implicit módon átalakítsa az értéket.
Logikai értékké alakítás gyakran történik a következő esetekben:
? első operandusa! operandusa&& és OR || operátorok operandusai (a kifejezés eredménye az egyik operandus, nem feltétlenül logikai érték)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
Ha az összeadás + operátort primitív értékekre használjuk, és az egyik operandus string, akkor a másik is stringgé konvertálódik.
A konverzió logikája ugyanaz, mint a String függvény használatakor.
Ezután a két string összefűződik.
let name;
'hello ' + name;
// => 'hello undefined'
Sok operátor a fentebb bemutatott Number függvény logikája szerint számmá konvertálja az operandusokat (ha szükséges).
+ (ha nincs benne string), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
Ha bármelyik operátorról többet szeretnél megtudni, nézd meg az MDN operátorlistáját.
A hibák elkerülése érdekében jó gyakorlat, ha ezen operátorok alkalmazása előtt mindig explicit módon meghívod a Number függvényt.
A barátod, Kojo nagy számrajongó. Van egy kis weboldala, a „fun-with-numbers”. Kojo nem túl jó programozásban, ezért segítséget kért tőled.
Két segédfüggvényt fogsz építeni Kojo weboldalának új számjátékaihoz, és egy harmadikat, amely ellenőrzi a felhasználó által megadható bemenetet.
Kojo weboldalának egyik játéka úgy néz ki, mint egy nyerőgép, amely két számkerekes csoportot mutat. Minden számjegycsoport egy-egy számot jelöl. A játék mechanikájához Kojónak tudnia kell ennek a két számnak az összegét.
Írj egy twoSum függvényt, amely két tömböt fogad paraméterként.
Mindegyik tömb egy vagy több 0 és 9 közötti számból áll.
A függvény mindegyik tömböt számként értelmezze, és adja vissza a két szám összegét.
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
A weboldal egy másik játéka egy kis kvíz, amelynek a neve „Lucky Numbers”. A felhasználó beírhat egy számot, és utána meglátja, hogy a szám egy titkos sorozathoz vagy mintázathoz tartozik-e. A „szerencseszámok” sorozata vagy mintázata minden hónapban változik, és minden felhasználónak csak korlátozott számú próbálkozása van, hogy kitalálja.
Az e havi szerencseszámok palindrom számok legyenek. A palindrom számok értéke nem változik, ha a számjegyeiket megfordítjuk.
Valósítsd meg az új luckyNumber függvényt, amely paraméterként egy számot fogad.
A függvény true értéket adjon vissza, ha a szám palindrom, egyébként pedig false értéket.
A bemeneti szám mindig pozitív egész szám lesz.
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
A weboldal különböző pontjain vannak beviteli mezők, ahová a felhasználók számokat írhatnak be, majd egy gombra kattintva elindíthatnak valamilyen műveletet. Kojo szeretné javítani az oldala felhasználói élményét. Hibaüzenetet szeretne megjeleníteni arra az esetre, ha a felhasználó rákattint a gombra, de a mező érvénytelen bemeneti értéket tartalmaz.
Íme néhány további információ arról, hogyan adódik egy beviteli mező értéke.
undefined vagy null.Írj egy errorMessage függvényt, amely paraméterként fogadja a felhasználói bemenetet.
Ha a felhasználó nem adott meg semmilyen bemenetet, az errorMessage a 'Required field' értéket adja vissza.
Ha a bemenet nem reprezentál egy nem nulla számot (a JavaScript konverziós szabályai szerint), a 'Must be a number besides 0' értéket kell visszaadnia.
Minden más esetben feltételezheted, hogy a bemenet érvényes, a visszatérési érték egy üres string legyen.
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
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.