⊗jsPmBsATC 43 of 505 menu

Automatyczna konwersja typów danych

Jak już wiesz, ciągi znaków w JavaScript należy ujmować w cudzysłów. Może się zdarzyć, że wszystkimi znakami ciągu będą cyfry:

let a = '123';

W tym przypadku zmienna a również jest ciągiem znaków, ale z pewnym niuansem.

Istota niuansu jest następująca: jeśli na ciągu znaków z cyframi wykonamy jakąkolwiek operację matematyczną - operacja ta zostanie wykonana tak, jakbyśmy faktycznie mieli liczby, a nie ciągi znaków:

alert('2' * '3'); // wyświetli 6

W tym przypadku JavaScript widzi, że próbujemy wykonać niedozwoloną dla ciągów znaków, ale dozwoloną dla liczb operację.

Widzi również, że faktycznie nasze ciągi znaków - to liczby w cudzysłowie. Dlatego JavaScript automatycznie wykonuje konwersję tych ciągów znaków na liczby i wykonuje odpowiednią operację matematyczną na nich.

To działa, jeśli w naszych ciągach znaków są tylko cyfry. Jeśli będzie tam choć jedna litera - JavaScript uzna operację za nieprawidłową i ustawi jej wynik na wartość NaN:

alert('2' * '3s'); // wyświetli NaN

Ponadto, automatyczna konwersja zachodzi, jeśli operacja jest matematycznie poprawna, ale niedozwolona dla ciągów znaków.

Na przykład, ciągów znaków nie można (a liczby można) mnożyć, dzielić, odejmować, więc we wszystkich takich operacjach nastąpi automatyczna konwersja ciągów znaków z cyframi na liczby.

Jednakże, ciągi znaków, podobnie jak liczby, są dodawane za pomocą operatora +. Oznacza to, że w przypadku dodawania automatycznej konwersji nie będzie:

let a = '1' + '2'; alert(a); // wyświetli '12' - nastąpiło dodanie ciągów znaków

Jeśli jeden ze składników jest liczbą, a drugi - ciągiem znaków, to zawsze wygrywa ciąg znaków:

let a = 1 + '2'; alert(a); // wyświetli '12'

W takich przypadkach JavaScript, wręcz przeciwnie, automatycznie konwertuje liczby na ciągi znaków i wykonuje dodawanie ciągów znaków.

Istnieją jednak niuanse, gdy składników jest więcej niż dwa: w tym przypadku konwersja do określonego typu zależy od kolejności wykonywania operacji.

W następnym przykładzie najpierw 2 i 3 dodadzą się jako liczby, a następnie wynik zostanie dodany do ciągu znaków '1' już jako ciąg znaków '5', co ostatecznie da ciąg znaków '15':

let a = '1' + (2 + 3); alert(a); // wyświetli '15'

Jeśli jednak usuniemy nawiasy, wszystko będzie dodawane od lewej do prawej. To znaczy najpierw do ciągu znaków '1' zostanie dodana liczba 2 i w wyniku powstanie ciąg znaków '12'. Następnie do tego ciągu znaków zostanie dodana liczba 3 i w wyniku powstanie ciąg znaków '123':

let a = '1' + 2 + 3; alert(a); // wyświetli '123'

A w następnym przykładzie liczby 2 i 3 są napisane na początku, więc najpierw dodadzą się jako liczby, dając w wyniku liczbę 5, a następnie do tej liczby zostanie dodany ciąg znaków '1', dając ostatecznie ciąg znaków '51':

let a = 2 + 3 + '1'; alert(a); // wyświetli '51'

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' + '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' + 2; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = 5 + '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = 5 + 2; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' * '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' - '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' / '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' % '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5s' * '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5s' + '2'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = (-'5') + (-'2'); alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' * 1 + '2' * 1; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '5' * '1' + '2' * '1'; alert(a);

Nie uruchamiając kodu, określ, co wyświetli się na ekranie:

let a = '' + 3 + 1; alert(a);
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć