A InfoWiki wikiből
(uploaded) |
Aktuális változat (2009. június 26., 21:25) (lapforrás) (uploaded) |
||
1. sor: | 1. sor: | ||
- | <cim cim3=" | + | <cim cim3="String típus" |
- | + | cim2="" | |
- | + | cim1="CGI és Űrlap feldolgozás" | |
- | + | kep="hz_csik.png" | |
- | + | back="cgi-ea/Nyitolap" | |
- | + | prev="cgi-ea/page116" | |
- | + | next="cgi-ea/page120" | |
- | + | szerzo="hz|Hernyák Zoltán"/> | |
- | /> | + | |
<path l1="cgi-ea/Nyitolap|Előadás" l2="cgi-ea/Tematika|Vizsga" l3="cgi-ea/Foliak|Fóliák" lx="-" | <path l1="cgi-ea/Nyitolap|Előadás" l2="cgi-ea/Tematika|Vizsga" l3="cgi-ea/Foliak|Fóliák" lx="-" |
Aktuális változat
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
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");