Łączenie stringów Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
wtorek, 22 września 2009 17:39

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

1.<script type="text/javascript">
2.    var string_1 = "To jest";
3.    var string_2 = "tekst";
4. 
5.    alert(string_1 + ' ' + string_2);
6.    // można oczywiście połączyć to też tak:
7.    // alert(string_1 + string_2);
8.</script>

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:

1.<script type="text/javascript">
2.    var liczba_1 = 5;
3.    var liczba_2 = 2;
4. 
5.    alert('Jacek ma ' + liczba_1 + ' jablek,\n' +
6.        'a Agatka ma ' + liczba_2 + ' gruszki.\n' +
7.        'Razem mają więc ' + liczba_1+liczba_2 + ' owoców!');
8.</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.

1.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:

1.var suma = liczba_1+liczba_2;
2.var ciag_znakow = 'Jacek ma ' + liczba_1 + ' jablek,\n' +
3.        'a Agatka ma ' + liczba_2 + ' gruszki.\n' +
4.        'Razem mają więc ' + suma + ' owoców!';
5. 
6.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.