Blog webdeveloperski Patryk yarpo Jar

Konkatenacja stringów w JS

Autor wiadomości Styczeń 12, 2011

Polecam nowszy wpis:

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

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);

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:

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>

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.

alert('Razem mają więc ' + (liczba_1+liczba_2) + ' owoców!');

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:

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);

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.

Komentarze (1) Trackbacks (0)
  1. Jest jeszcze metoda concat która znakomicie się spisuje do stworzenia stringa w postaci stałoznakowego timestampa.


Leave a comment

 

Brak trackbacków.