Konkatenacja stringów w JS

Polecam nowszy wpis:

W JS operatorem łączącym dwa stringi [ciągi znaków] jest ‚+’. W prostych wygląda to tak:

[javascript]var string_1 = „To jest”;
var string_2 = „tekst”;

alert(string_1 + ‚ ‚ + string_2);
// można oczywiście połączyć to też tak:
// alert(string_1 + string_2);[/javascript]

W wyniku tego kodu otrzymamy alert wyświetlający: „To jest tekst”.

Ktoś mógłby zapytać, po co więc ta porada? Otóż, czasem zdarza się, że nie jest tak fajnie, że łączymy tylko dwa stringi, ale chcemy także wpleść w to jaką liczbę. Niestety, jako, że w JS typ danych nie jest na sztywno przypisany do zmiennej [tak, jak np. w C czy Pascalu], to się okazuje, że często dwie liczby zamiast dodać, zostaną połączone, np:

[javascript]var liczba_1 = 5;
var liczba_2 = 2;

alert(‚Jacek ma ‚ + liczba_1 + ‚ jablek,\n’ +
‚a Agatka ma ‚ + liczba_2 + ‚ gruszki.\n’ +
‚Razem mają więc ‚ + liczba_1+liczba_2 + ‚ owoców!’);
</script>[/javascript]

Wynikiem działania tego skryptu będzie: „Jacek ma 5 jabłek, a Agatka ma 2 gruszki. Razem mają 52 owoce!”. Jak widać, niestety zamiast dodać skrypt je złączył – tak jakby operował na tekście. Jest kilka rozwiązań, np objęcie działań nawiasami.

[javascript]alert(‚Razem mają więc ‚ + (liczba_1+liczba_2) + ‚ owoców!’);[/javascript]

Innymi spotykanymi rozwiązaniami jest wprowadzenie dodatkowego działania, które nie zmienia jednak wartości. Np ‚*1’. Jakakolwiek liczba pomnożona razy 1, da samą siebie.

Jednak moim zdaniem najlepszym rozwiązaniem jest:

[javascript]var suma = liczba_1+liczba_2;
var ciag_znakow = ‚Jacek ma ‚ + liczba_1 + ‚ jablek,\n’ +
‚a Agatka ma ‚ + liczba_2 + ‚ gruszki.\n’ +
‚Razem mają więc ‚ + suma + ‚ owoców!’;

alert(ciag_znakow);[/javascript]

Problem wydaje się banalny, ale w wielu przypadkach może naprawdę sporo zepsuć. Nie zawsze warto skracać kod za wszelką cenę. Czasem dłuższy kod jest czytelniejszy = lepszy.

Jedna odpowiedź do “Konkatenacja stringów w JS”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *