Strenge, og standardobjektet String
Strenge defineres ved at skrive værdien i gåseøjne: Str = "en række af bogstaver"
eller StrObj = new String("flere bogstaver")
Særlige tegn skulle kunne indsættes ved hjælp af backslash \ , men det har jeg aldrig kunnet få til at virke:
\\ = \ | \" = " | \' = ' |
\n = linieskift | |
\xNN : | NN er et 2-cifret hextal ( det virker ! ) |
ANSI-tegn nr NN, f.eks. <script> document.write("\x40\x41") </script> skriver
da tegnene @ og A er ansi-tegn nr. 64 og 65,
og 64 og 65 som hextal er 40 og 41. |
\xNNNN : | NNNN er et 4-cifret hextal |
UNICODE -tegn
nr NNNN, f.eks. \x03BB =
burde skrive lambda ( λ ) virker ikke
|
<script language=javaScript>var str="strengØøe"; var s2="Esto";</script>
definerer variable brugt i eksemplerne i tabellen. reg_exp betyder et
Regular Expression
Eneste variabel ejet af streng er "length".
str.length=
| funktion() | eksempel | uddybende forklaring |
| anchor("anchorNavn") | str.anchor("NytAnker") | | Laver et anker, ligesom <A
name=NytAnker> |
| big( ) | str.big() = | | |
| blink( ) | str.blink() = | | Blink (dúr kun i Netscape og Firefox) |
| bold( ) | str.bold() = | | |
| charAt(index) | str.charAt(3) = | | 1ste position = nr. 0 |
| -"- | str.charAt(9) = | | Max. index er 8 |
| charCodeAt(index) | str.charCodeAt(3) = | | e er ansitegn nr. 101 |
| -"- | str.charCodeAt(9) = | | I eksemplet er max. index 8 |
| -"- | | Ak og ve, charCodeAt virker ikke hvis tegnets nummer er mellem 128 og 159, se
|
| concat(string2) | str.concat(s2) = | | som operatoren + |
| fixed( ) | str.fixed() = | | alle tegn samme bredde |
| fontcolor("#rrggbb") | str.fontcolor("#FF0000") = | | |
| fontsize(1 til 7) | str.fontsize(5) = | | 1=mindst, 7 størst |
| fromCharCode(n1,..) | String.fromCharCode(64,65,66,67,128) | = | Tegn nr. 64,65,66,67 (og nr 128 med fejl).
NB: Metode til String, ikke str; virker ikke på bl.a. tegn nr 128, . Derfor har jeg lavet en alternativ metode, klik:
|
| indexOf("string") | str.indexOf("en") = | | |
| -"- | str.indexOf("Q") = | | |
| italics( ) | str.italics() = | | |
| lastIndexOf("string2") | str.lastIndexOf("e") = | | |
| length | AbC.length = | | En egenskab, derfor uden () |
| link(URL) | str.link("#NytAnker") | | Klik for hop til "anchor" ovenfor |
| match(reg_exp) | str.match(/[Ee]/) = | | den del af reg_exp der matcher |
| replace(reg_exp,"string2")
str.replace(/e/,"jjj") = | | Kun første forekomst |
| search(reg_exp) | str.search(/e/) = | | |
| slice(i) | str.slice(3) = | | |
| slice(i,j) | str.slice(3,5) = | | |
| slice(0,str.length-1) | str.slice(0,str.length-1)= | | str minus bagerste tegn |
| small() | str.small() = | | |
| split(char) | str.split("e") = | |
|
| strike() | str.strike() = | | |
| sub() | str.sub() = | | som <SUB> i HTML
(i nogle ældre browsere fejlagtigt som som <SUP> ) |
| substr(start, lenght) | str.substr(2,2) = | | 1.ste tegn position 1 |
| substring(n1, n2) | str.substring(2,5) = | | fra pos. n1 til pos (n2-1) |
| sup() | str.sup() = | | som <SUP> i HTML |
| toLowerCase() | str.toLowerCase() = | | str er uændret |
| toUpperCase() | str.toUpperCase() = | | |
|
Strenges alfabetisering
JavaScript har ikke en funktion til at se hvilken streng der kommer først i alfabetet. Jeg har derfor lavet en såden, som du kan se ved
at klikke her:
String.fromCharCode virker ikke altid
Det er pinligt at String.fromCharCode(xx) ikke virker for xx=128, for ældre browsere inden blev et anerkendt tegn
la'gå, men med bange anelser vil jeg nu her skrive alle tegnene #20-#255, dels som &xxx; kode og dels med String.fromCharCode()-
Netscape forstår ikke &#xxx; kode for tegn nr 128, 129, 140, 141, 142, 143, 144, 157, 158 (for Firefox ligeså,
dog kun nr. 129, 141, 143, 144, 157) så i tabellen til venstre er disse
9 tegn i stedet skrevet ind i kildeteksten ved at holde Alt-tasten nede og taste 0xxx:
Tegn lavet med &#xxxx; kode
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
|
|
Tegn lavet med String.fromCharCode(xxx)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
|
|
Og ak ja - i min browser virker String.fromCharCode(tal) ikke for tal i intervallet 127-159
(for tal = 127, 129, 141, 143, 144, 157 er det dog muligvis ikke fromCharCode's fejl)
Problemet kan løses ved at omdefinere (overskrive) String.fromCharCode(tal), eller ved at definere en ny funktion, hvilket
jeg har gjort - egentlig er der ikke noget i vejen for at kalde den fromCharCode(), men jeg har alligevel valgt at kalde den
xfromCharCode. Du ser resultatet til højre og kildeteksten nedenfor:
<script language=JavaScript>
var tegn128_159="
"+"";
function xfromCharCode(){
// function String.fromCharCode(tal) virker ikke for tal 127-149
var facit="";
for (var i=0; i<xfromCharCode.arguments.length; i++){
var tegnnr=xfromCharCode.arguments[i];
if (tegnnr ==0) facit +=" " //tegn nr 0 skrives ikke
else if ((tegnnr<127)||(tegnnr>159))
facit+=String.fromCharCode(tegnnr)
if (tegnnr>=128){ // Tegn nr 127 er ingenting, ikke engang et blanktegn
facit += tegn128_159.charAt(Math.floor(tegnnr)-128);
} // end if tegnnr >= 128
} // end for i
return facit;
}// end function xfromCharCode
</Script>
function xfromCharCode er et objekt af typen function, de ejer en variabel arguments = en array med de
parametre funktionen er kaldt med. xfromCharCode.arguments.length er derfor antallet af parametre, og
xfromCharCode.arguments[2] er den 3.je parameter.
xfromCharCode ( og String.fromCharCode ) skriver tegn fra UNICODE-tegnsættet
, der er en udvidelse af ansi-tegnsættet:
xfromCharCode(945,946,947,948,949,950,951,952,953,954,955,956) =
|
Tegn lavet med xfromCharCode(xxx)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
|
xfromCharCode(63,64,65,66,67,"Olsen",68) =
xfromCharCode(65,-1,66,500,67,0,68) =
xfromCharCode(65,0,66,500,67,0.4,68) =
xfromCharCode(65,65.1,65.4,65.5,65.6,66) =
xfromCharCode(65,-100,500,4e10,66) =
xfromCharCode(65,65+1,65+2) =
Vi ser, at xfromCharCode opfører sig nogenlunde fornuftigt selvom den får ufornuftige parametre. Decimalbrøker
får fjernet tallene efter kommaet, regnestykke udregnes, og der ses bort fra umulige strenge såsom "Olsen".
Der er derfor ikke nogen særlig grund til at lave et tjek, at parametrene er positive heltal.
I programmeringssproget C bruges tegn nr 0 til at afslutte en streng med. Det synes også at være tilfældet
i javaScript, String.fromCharCode(65,66) =
String.fromCharCode(65,0,66) = : Der står først
et A, men hvis der så står et et tegn nr 0 afsluttes strengen, og B'et bagved ses ikke (... jo det ses med Firefox,
men ikke med I.Explorer og Netscape).
I min funktion xfromCharCode har jeg derfor valgt ikke ar skrive tegn nr. 0
|
|
charCodeAt(index) virker ikke altid
Det er pinligt at hvis s er en streng, så giver s.charCodeAt(indexnr) en forkert charcode hvis tegnet i positionen svarende til
indexnr er et tegn med ansinummer mellem 128 og 159. Jeg har derfor måttet lave en ny funktion til erstatning.
Tabellen til højre viser hvad tegnnumrene laves om til, 1.ste kolonne viser tegnets rigtige nummer, 2.den kolonne hvilket tegn
det er, og 3.je kolonne hvilket nummer charCodeAt giver det når det støder på tegnet, og 4.de kolonne do med xcharCodeAt.
Kolonnerne 1, 3 og 4 burde så være ens, men ak for kolonne 2: med Internet Explorer gælder det kun for de "forbudte"
tegn nr. 129, 141, 143, 144 og 157, og med Netscape får osse disse tegne gale
numre.
Jeg tilføjer nu en metode xcharCodeAt til objekter af typen String. Hertil bruger jeg jeg variablen prototype
arvet fra objekttype Object.
<script language=JavaScript>
tegn128_159="
"+"";
//tegn128_159 er defineret ovenfor
function xxCharCodeAt(iii){
var xxFacit="";
if (iii<this.length){
var xxCh=this.charAt(iii);
var xxi=tegn128_159.indexOf(xxCh);
if (xxi<0) xxFacit=this.charCodeAt(iii)
else xxFacit=128+xxi
}
return xxFacit;
}
String.prototype.xcharCodeAt=xxCharCodeAt;
<</script>
Eks: var s="@ABC";
document.write(s.xcharCodeAt(0) +" "+s.xcharCodeAt(1) +" "+s.charCodeAt(2) +" "+s.xcharCodeAt(3) +" "+s.xcharCodeAt(4)
+" men s.xcharCodeAt(5) = "+s.xcharCodeAt(5));
skriver
|
|
nr | char | Nyt nr med charCodeAt | Nyt nr med xcharCodeAt |
|
|
|