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:

javascriptlet 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:

javascriptalert('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:

javascriptalert('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ó:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet a = 2 + 3 + '1';
alert(a); // kiírja '51'-et
Задание 1

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' + '2';
alert(a);
Задание 2

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' + 2;
alert(a);
Задание 3

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = 5 + '2';
alert(a);
Задание 4

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = 5 + 2;
alert(a);
Задание 5

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' * '2';
alert(a);
Задание 6

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' - '2';
alert(a);
Задание 7

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' / '2';
alert(a);
Задание 8

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' % '2';
alert(a);
Задание 9

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5s' * '2';
alert(a);
Задание 10

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5s' + '2';
alert(a);
Задание 11

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = (-'5') + (-'2');
alert(a);
Задание 12

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' * 1 + '2' * 1;
alert(a);
Задание 13

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '5' * '1' + '2' * '1';
alert(a);
Задание 14

A kód futtatása nélkül határozd meg, mi jelenik meg a képernyőn:

javascriptlet a = '' + 3 + 1;
alert(a);