Automatikus típuskonverzió
Mint már tudod, a JavaScript-ben a stringeket idézőjelek közé kell tenni. Előfordulhat, hogy a string minden karaktere szám:
let a = '123';
Ebben az esetben az a változó is
egy string, de egy árnyalattal.
Az árnyalat a következő: ha egy számokat tartalmazó stringen valamilyen matematikai műveletet hajtunk végre - ez a művelet úgy fog lefutni, mintha valóban számokkal dolgoznánk, nem stringekkel:
alert('2' * '3'); // kiírja 6-ot
Ebben az esetben a JavaScript látja, hogy olyan műveletet próbálunk végrehajtani, amely a stringekre nem megengedett, de a számokra igen.
Azt is látja, hogy a stringjeink valójában idézőjelek közé tett számok. Ezért a JavaScript automatikusan átalakítja ezeket a stringeket számokká, és végrehajtja a megfelelő matematikai műveletet rajtuk.
Ez akkor működik, ha a stringjeinkben csak
számjegyek vannak. Ha ott akár egyetlen betű is szerepel
- a JavaScript érvénytelennek fogja tekinteni a műveletet
és az eredménye az NaN érték lesz:
alert('2' * '3s'); // kiírja NaN-t
Ezen kívül automatikus konverzió történik, ha a művelet matematikailag korrekt, de a stringekre nem megengedett.
Például a stringeket nem lehet (de a számokat lehet) szorozni, osztani, kivonni, ezért minden ilyen műveletben automatikus átalakítás történik a számokat tartalmazó stringekből számokká.
Azonban a stringek, akárcsak a számok, összeadhatók
a + operátorral. Ez azt jelenti,
hogy összeadás esetén nem történik automatikus
konverzió:
let a = '1' + '2';
alert(a); // kiírja '12'-t - stringek összeadása történt
Ha az egyik tag szám, a másik pedig string, akkor mindig a string nyer:
let a = 1 + '2';
alert(a); // kiírja '12'-t
Ilyenkor a JavaScript éppen ellenkezőleg, automatikusan átalakítja a számokat stringekké, és végrehajtja a stringek összeadását.
Vannak azonban árnyalatok, amikor kettőnél több tag van: ebben az esetben a konverzió egy adott típusra a műveletek végrehajtási sorrendjétől függ.
A következő példában először a 2 és a 3
összeadódik számként, majd az eredmény hozzáadódik
a '1' stringhez már mint '5' string,
ami végül a '15' stringet adja:
let a = '1' + (2 + 3);
alert(a); // kiírja '15'-öt
Ha viszont eltávolítjuk a zárójeleket, akkor minden balról
jobbra fog összeadódni. Azaz először a '1'
stringhez adódik hozzá a 2 szám, és az eredmény
a '12' string lesz. Majd ehhez a stringhez
adódik hozzá a 3 szám, és az eredmény
a '123' string lesz:
let a = '1' + 2 + 3;
alert(a); // kiírja '123'-at
Viszont a következő példában a 2
és a 3 számok az elején vannak, így először
ők adódnak össze számként, ami az eredmény
a 5 szám lesz, majd ehhez a számhoz adódik hozzá
a '1' string, ami végül a '51' stringet adja:
let a = 2 + 3 + '1';
alert(a); // kiírja '51'-et
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' + '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' + 2;
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = 5 + '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = 5 + 2;
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' * '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' - '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' / '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' % '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5s' * '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5s' + '2';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = (-'5') + (-'2');
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' * 1 + '2' * 1;
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '5' * '1' + '2' * '1';
alert(a);
A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:
let a = '' + 3 + 1;
alert(a);