Személyes eszközök
Keresés

 

A InfoWiki wikiből


Tartalomjegyzék

String típus

A JS nyelven létezik a String (szöveg) típus. Ebbe a típusba tartozó literálokat vagy aposztróf (') vagy idézőjel (") segítségével lehet elhatárolni. Mindkettő működik, de kevereni őket egyetlen literál megadása esetén nem lehet (ugyanazt a jelet kell lezáráshoz is használni, mint amivel kezdtük írni):

var nev="Zozó";
var ferj='Lajoska';
var kukac='@';

A karakter típus nem létezik a JS nyelven. A karaktereket az egy hosszú string értékek jelölik.

A túl hosszú stringeket helytelen több sorba írni. Ekkor több apró részre kell feldarabolni, és a + operátorral összefűzni.

var nev="Kiss "+
        "Lajos";
var operacios_rendszer="Windows "+
   'Vista';

Ekkor az sem helytelen, hoy az egyik string darabkát idézőjellel, a másikat aposztróffal írjuk.

String összefűzés

A stringek között értelmezhető a + (összeadás, összefűzés) operátor. Érdekesebb a helyzet, ha egy stringet nem egy másik stringgel, hanem egy numerikus értékkel fűzzük össze:

var s = "3*";
var x = 2;
var z = s+x;

A z változó értéke jelen esetben "3*2" lesz. Miért? String-et számértékkel összeadni nem lehet - az összeadás helyett összefűzést végez el a rendszer, vagyis a számértéket automatikusan stringre alakítja át, végül két string között végzi el az összefűzést.

Ezt pompásan kihasználhatjuk az alert(...) kapcsán is:

var x = 312;
alert("Az érték x="+x);


String kiértékelés

Van arra lehetőség, hogy egy string alakban tárolt numerikus kifejezés értékét kiszámíttassuk futás közben. Erre az eval függvény alkalmas:

var s = "3*2";
var z = eval(s);

A fenti esetben a z változó numerikus típusú lesz, értéke 6.

String konvertálása

Gyakori eset, amikor string típusú értékként találkozunk számokkal. Ugyanakkor ezzel a számmal nem végezhetünk numerikus műveleteket, hiszen pl. az összeadás műveletet félre fogja értelmezni a rendszer. Szükséges egyértelműen a tudomására hozni, hogy az értéket számként kell értelmezni. Ekkor a stringet numerikus értékké konvertáljuk. Két függvényt alkalmazhatunk:

  • parseFloat(...)
  • parseInt(...)

Amikor string-et parsolunk, mindíg felmerül annak veszélye, hogy a string tartalma mégsem szám, nem értelmezhető számként. A parse függvények ekkor hibával leállnak. A parseInt(...) csak akkor nem áll le hibával, ha a paraméterében megadott szöveg értelmezhető egész számértékként. A parseFloat(..) megengedi a tört érték jelenlétét is (tizedesponttal):

var s = "342";
var y = s+4;
var z = parseInt(s);
var x = z+4;

A fenti példában az y változó string típusú lesz, értéke 3424, vagyis stringek összefüggése történik. A z típusa már numerikus, értéke 342 lesz. Ám mivel numerikus, így a következő sorban az összeadás operátor értelme valóban számok összeadása lesz.

A parseFloat és a parseInt közötti különbség a következő kódban nyilvánul meg:


var s = "342.5";
var z = parseInt(s);
var x = z+4;

Ebben a kódban a parseInt(...) elkezdi kiértékelni az s változóban található karaktersorozatot. A 3, 4, 2 karaktereket érti. A tizedespont felfedezésekor azonban megtorpan, olyan nem szerepelhet egy egész számban (illegális karakter). Ezért az addig értelmezett 342 jelsorozatot tekinti egész számnak, és az kerül be a z változóba, melynek típusa numerikus lesz. Az x változónkba ennek megfelelően 346 érték kerül.

var s = "342.5";
var z = parseFloat(s);
var x = z+4;

A fenti esetben megengedjük a tört számérték jelenlétét is. A parseFloat a tizedespont után még az 5 számjegyet is képes megérteni, így z értéke maga a teljes tört számérték lesz, s így az x értéke 346.5 lesz.

String metódusok

Minden string egyben a String osztály példánya, így léteznek példányszintű metódusai. Ha s egy string típusú példány, akkor...

  • s.length megadja a szöveg hosszát
  • s.substr(k,n) megadja a k. betűtől n betű hosszú részt
  • s.indexOf(c) megadja, hogy a c szöveg hányadik betűnél fordul elő először az s-en belül (ha nem fordul elő, akkor -1 értéket ad meg)
  • s.replace(m,p) az m szöveg első előfordulását lecseréli a p szövegre.
var s = "hello";
var n = s.length; // 5
var x = s.substr(1,3); // "ell"
var i = s.indexOf('l'); // 2
A substr metódus esetén ügyeljünk arra, hogy a string legelső karakterének sorszáma a 0!


Ha a substr során olyan kezdőpontra hivatkozunk, amely nem létezik, akkor a művelet nem végrehajtható (pl. 5 betűs string esetén a nyolcadiktól kezdeni). Ha a kezdőpont jó, de a kért hosszúság már nem fér bele a stringbe, az is hibát jelez (pl 8 betűs stringben a negyedik karaktertől hat karakter hosszúságot kérni).

Az indexOf függvény adott karaktert keres a stringben. Ha nem talál olyat, akkor -1 értékkel tér vissza. Ha az adott karaktert többször is megtalálja, akkor az első sorszámával tér vissza (a sorszámozás még mindig 0-tól kezdődik!). A keresés kisbetű-nagybetű érzékeny, vagyis kis 'l' betű keresésekor nem veszi figyelembe az esetleg előforduló 'L' karaktereket.

A replace adott részstringet cserél ki másra.

var s = "123.2";
var n = s.replace(".",","); // 123,2

A fenti kód az angol formátumú (tizedespontot használó) tört számban a pontot tizedesvesszőre cseréli. Ugyanakkor vizsgáljuk meg az alábbi kódot:


var s = "2009-02-01";
var n = s.replace("-","."); // 2009.02-01

Észrevehetjük, hogy a replace csak az első előfordulást cseréli ki. Ha minden előfordulást cserélni akarunk, akkor együtt kell alkalmazni az indexOf-al:

var s = "2009-02-01";
while (s.indexOf("-") != -1)
{
   s = s.replace('-','.');
}

Figyelembe véve a JS prototípus alapú OO modelljét (erről később lesz szó), a minden egyes előfordulást kicserélő függvényt a string típus részévé lehet tenni az alábbi módon:

String.prototype.replaceAll = function( strTarget, strSubString)
{
 var strText = this;
 var intIndexOfMatch = strText.indexOf( strTarget );
 while (intIndexOfMatch != -1)
 {
   strText = strText.replace( strTarget, strSubString )
   intIndexOfMatch = strText.indexOf( strTarget );
 }
 return( strText );
}

Ennek használata:

var s = "2009-02-01";
var n = s.replaceAll("-","."); // 2009.02.01


Következő megoldás, hogy a cserélendő stringet reguláris kifejezéssel írjuk le. A reguláris kifejezés esetén minden előfordulást kicserél az alap replace is.

var kif = /(\w+)\s(\w+)/;
var eredeti = "John Smith";
var javitott = eredeti.replace(aRegularExpression, "$2, $1");
A lap eredeti címe: „http://wiki.ektf.hu/wiki/Cgi-ea/page118
Nézetek
nincs sb_35.172.224.102 cikk