JavaScript har et antal indbyggede objekter, der udvider sprogets fleksibilitet. Disse objekter er dato, matematik, streng, matrix og objekt. Flere af disse objekter er "lånt" fra Java-sprogspecifikationen, men JavaScript's implementering af dem er anderledes. Hvis du er fortrolig med Java, vil du nøje undersøge JavaScript's indbyggede objekttyper for at undgå forvirring.
JavaScript-objektmodellen er enkel. Hovedparten af disse objekter beskæftiger sig med vinduesindhold - dokumenter, links, formularer og så videre. Ud over vindueindholdsobjekter understøtter JavaScript en lille håndfuld "indbyggede" objekter. Disse indbyggede objekter er tilgængelige uanset vinduesindhold og fungerer uafhængigt af hvilken side din browser har indlæst.
Læring af JavaScript
Denne artikel er en del af JavaWorlds tekniske indholdsarkiv. Du kan lære meget om JavaScript-programmering ved at læse artikler i JavaScript-serie, bare husk at nogle af oplysningerne sandsynligvis vil være forældede. Se "Brug af JavaScript og formularer" og "Fejlfinding af JavaScript-programmer" for mere om programmering med JavaScript.
De indbyggede objekter er dato, matematik, streng, matrix og objekt. Hver bruges på en unik og ikke helt konsistent måde. Desuden implementerer nyere versioner af JavaScript (som de findes i Netscape "Atlas", i øjeblikket i beta) flere af disse objekter på en anden måde end i Netscape 2.0. I denne kolonne vil vi adressere disse indbyggede objekter, og hvordan man bruger dem. Og vi bemærker de særheder, du vil støde på, når du anvender disse objekter på dine JavaScript-sider.
Forståelse af strengobjektet
Af alle JavaScript-objekter er String-objektet den mest anvendte. I Netscape 2.0 JavaScript-implementeringen oprettes nye strengobjekter implicit ved hjælp af en variabel tildeling. For eksempel,
var myString = "Dette er en streng";
opretter en streng med den angivne tekst kaldet myString.
I Netscape 2.0 er der ikke noget faktisk objekt kaldet streng, og forsøg på at instantiere et nyt strengobjekt ved hjælp af den nye sætning resulterer i en fejl, da streng (eller streng) ikke er et defineret nøgleord. I Atlas-versionen af Netscape er String dog et bona fide-objekt, og String-nøgleordet kan bruges til at oprette nye strenge. Følgende to tilgange er tilladt i Atlas, men ikke i Netscape 2.0.
var myString = ny streng (); myString = "Dette er en streng";
og
var myString = ny streng ("Dette er en streng");
Strenggenstande har en egenskab: længde. Længdeegenskaben returnerer længden af strengen og bruger syntaksen streng.længde,
hvor streng er navnet på strengvariablen. Begge følgende skærme 16.
alarm ("Dette er en streng" .length)
og
var myString = "Dette er en streng"; alarm (myString.length);
Selvom der muligvis kun er en strengegenskab, understøtter JavaScript et stort antal metoder, der kan bruges med strenge. Disse metoder kan groft opdeles i to brede lejre: strengstyring og tekstformat.
Mere fra JavaWorld
Vil du have flere Java-virksomhedsnyheder? Få JavaWorld Enterprise Java-nyhedsbrevet leveret til din indbakke.
Strengstyringsmetoder inkluderer underlag
, indeks af
, lastIndexOf
og toLowerCase
. Disse bruges til at returnere eller ændre strengens indhold på en eller anden måde. For eksempel returnerer substreringsmetoden en specificeret del af en streng. Metoden indexOf bestemmer placeringen af et tegn eller en gruppe tegn i en streng. Og metoden toLowerCase konverterer strengen til små bogstaver. (Som du kan forestille dig, er der også en toUpperCase
metode.)
Tekstformatmetoder bruges til at formatere tekst i et dokument på en speciel måde og leveres som alternativer til brug af HTML-tags til samme formål. Disse metoder inkluderer store, små, sup, sub, anker, link og blink.
Strengmetoder kan bruges direkte på strenge eller på variabler, der indeholder strenge. Metoder bruger altid åbne og lukkede parenteser, selvom metoden ikke bruger parametre. For eksempel, for at konvertere tekst til store bogstaver, skal du bruge et af følgende:
var tempVar = "denne tekst er nu store bogstaver" .toUpperCase ();
eller
var myString = "denne tekst er nu med store bogstaver"; var tempVar = myString.toUpperCase ();
I Netscape 2.0 er der kun et strengobjekt, og alle strenge oprettes ud fra det. Omvendt er strenge førsteklasses objekter i Atlas, og hver nye streng behandles som et separat objekt. Strenges single-object-opførsel i Netscape 2.0 kan forårsage nogle subtile bivirkninger. Tag det korte manuskriptsegment, der følger. To strenge oprettes: streng1
og streng2
. En ny egenskab (kaldet ekstra) tildeles streng1. Alligevel viser advarselsmeddelelsen, at ejendommen også nu tilhører streng2.
string1 = "dette er streng 1" string2 = "dette er streng 2" string1.extra = "ny egenskab" alarm (string2.extra)
Teknisk set er strenge "uforanderlige" i JavaScript. Dvs. indholdet af strengen er statisk og kan ikke ændres. I Netscape 2.0 er JavaScript kun i stand til at ændre en streng ved at oprette en ny placering i hukommelsen til den. På grund af dette er et script, der ændrer en streng mange gange, udsat for hukommelsesfejl. Hver gang strengen ændres, opretter JavaScript en ny placering i hukommelsen til den nye version. Nye strenge oprettes, før skraldindsamling finder sted for at ødelægge den gamle streng. Til sidst bruger JavaScript al sin tilgængelige hukommelse, og der opstår en "ud af hukommelse" -fejl.
Et klassisk eksempel på dette problem kan ses i de populære JavaScript-meddelelsesruller, hvor en besked ruller i statuslinjen eller et tekstfelt. For hvert pas omdefinerer scrolleren den strengvariabel, der vises. Hukommelsen er til sidst opbrugt, fordi JavaScript opretter nye forekomster af strengen med hvert pas. For eksempel vil følgende script i sidste ende (hurtigere på nogle platforme, såsom Windows 3.1) forårsage en "ud af hukommelse" -fejl:
var count = 0; var text = "Dette er en test af en JavaScript-scroller."; rul (); funktionsrulle () {var myString = text.substring (count, text.length) + text.substring (0, count) window.status = myString if (count <text.length) count ++; ellers tæller = 0; setTimeout ("rul ()", 333); // 333ms er den mindste forsinkelse for Netscape 2.0}
En simpel omskrivning undgår problemet med at skabe nye hukommelsesblokke. Slet tildelingen af myString-variablen, og parser teksten direkte til statuslinjen ved hjælp af window.status.
window.status = text.substring (count, text.length) + text.substring (0, Count)
(Mens ovenstående fremgangsmåde undgår JavaScript's problem med replikering af streng-objekt, opstår der stadig hukommelseslækage på grund af brugen af setTimeout-metoden
. Over mange gentagelser - typisk flere tusinde eller mere - vil setTimeout forbruge al tilgængelig hukommelse, og til sidst vil JavaScript vise en "ud af hukommelse" -meddelelse.)
Til din reference er her de metoder og egenskaber, der bruges med JavaScript's strengobjekt:
Strengegenskaber
længde | Længden af en streng |
Strengmetoder
anker | Opretter et navngivet anker (hypertekstmål) |
stor | Indstiller tekst til stor |
blinke | Indstiller tekst til at blinke |
fremhævet | Sætter tekst til fed skrift |
charAt | Returnerer tegnet på en bestemt position |
fast | Indstiller tekst i skrifttype med fast tonehøjde |
skrift farve | Indstiller skriftfarven |
skriftstørrelse | Indstiller skriftstørrelse |
indeks af | Returnerer den første forekomst af tegn x startende fra position y |
kursiv | Indstiller tekst til kursiv |
lastIndexOf | Returnerer den sidste forekomst af tegn x startende fra position y |
link | Opretter et hyperlink |
lille | Indstiller tekst til lille |
strejke | Indstiller tekst til strejke |
under | Indstiller tekst til abonnement |
underlag | Returnerer en del af en streng |
sup | Indstiller tekst til overskrift |
toLowerString | Konverterer en streng til små bogstaver |
toUpperString | Konverterer en streng til store bogstaver |
Brug af JavaScript som en videnskabelig lommeregner
JavaScript's Math-objekt giver avancerede aritmetiske og trigonometriske funktioner, der udvider JavaScript's grundlæggende aritmetiske operatorer (plus, minus, multiplicer, divider). Matematikobjektet i JavaScript er lånt fra Java. Faktisk er implementeringen af Math-objektet i JavaScript tæt på Math-klassen i Java, bortset fra at JavaScript Math-objektet tilbyder færre metoder.
JavaScript's Math-objektegenskaber behandles som konstanter. Faktisk er ejendomsnavne i store bogstaver efter den sædvanlige konvention om kapitalisering af variable konstanter. Disse egenskaber returnerer ofte anvendte værdier, inklusive pi og kvadratroden af 2. Matematiske metoder bruges i matematiske og trigonometriske beregninger. Praktiske metoder til matematikobjekter inkluderer loft, gulv, strøm, eksp (eksponent), maks, min, rund og tilfældig. (Tilfældig er dog kun tilgængelig, når du bruger X Window-platformen.)
Math-objektet er statisk, så du behøver ikke oprette et nyt Math-objekt for at kunne bruge det. For at få adgang til egenskaberne og metoden til matematikobjektet skal du blot angive matematikobjektet sammen med den metode eller egenskab, du ønsker. For eksempel at returnere værdien af pi, du bruger:
var pi = Math.PI;
For at bruge en matematisk metode angiver du ligeledes navnet på metoden sammen med de parametre, du ønsker at bruge. For eksempel at afrunde værdien af pi, ville du bruge:
var pi = Math.PI; var pieAreRound = Math.round (pi); // viser 3
Bemærk, at du skal angive matematikobjektet ved navn for hver matematikmetode / egenskab, du ønsker at bruge. JavaScript genkender ikke nøgleordene PI og afrunder helt alene. Undtagelse: du kan bruge med
erklæring for at knytte navnene på metoder og egenskaber til matematikobjektet. Denne teknik er en praktisk pladsbesparende, når du skal bruge flere matematiske egenskaber og metoder. Det forrige eksempel kan skrives som
med (Matematik) {var pi = PI; var pieAreRound = rund (pi); alarm (pieAreRound)}
Til din reference er her de egenskaber og metoder, der understøttes af JavaScript's Math-objekt.
Matematiske egenskaber
E | Eulers konstant |
LN2 | Den naturlige logaritme af 2 |
LN10 | Den naturlige logaritme på 10 |
LOG2E | Basis 2 logaritmen af e |
LOG10E | Basis 10 logaritmen af e |
PI | Den numeriske ækvivalent af PI: 3.14 osv. |
SQRT1_2 | Kvadratroden af halvdelen |
SQRT2 | Kvadratroden af 2 |
Matematiske metoder
abs | Returnerer den absolutte værdi af et tal |
acos | Returnerer lysbue-cosinus for et tal |
som i | Returnerer buensinus for et tal |
solbrændt | Returnerer et tales buetangens |
loft | Returnerer det mindste heltal større end eller lig med et tal |
cos | Returnerer cosinus for et tal |
eksp | Returnerer e (Eulers konstant) til et tal |
etage | Returnerer det største heltal mindre end eller lig med dets argument |
log | Returnerer den naturlige logaritme (base e) for et tal |
maks | Returnerer den største af to værdier |
min | Returnerer den mindste af to værdier |
pow | Returnerer værdien af et tal gange en specificeret effekt |
tilfældig | Returnerer et tilfældigt tal (kun X-platforme) |
rund | Returnerer et tal afrundet til nærmeste hele værdi |
synd | Returnerer sinus for et tal |
sqrt | Returnerer kvadratroden af et tal |
tan | Returnerer tangenten for et tal |
Beder JavaScript om en dato
Også lånt af Java er Date-objektet, som kan bruges i JavaScript til at bestemme det aktuelle tidspunkt og dato. En populær JavaScript-applikation af Date-objektet viser et digitalt ur i et tekstfelt. Scriptet bruger Date-objektet til at opdatere uret en gang hvert sekund. Du bruger også datoobjektet til at udføre datematematik. For eksempel kan dit script muligvis bestemme antallet af dage mellem nu og en bestemt fremtidig dato. Du kan bruge dette til at vise en "nedtælling", f.eks. Antallet af dage tilbage af din virksomheds store salg.
JavaScript behandler Date-objektet som en konstruktorklasse. For at bruge Date skal du oprette et nyt Date-objekt; Du kan derefter anvende de forskellige datometoder for at hente og indstille datoer. (Date-objektet har ingen egenskaber.) Hvis du er bekendt med Date-klassen i Java, finder du egenskaberne for JavaScript Date-objektet stort set de samme. De mest anvendte metoder er få
metoder, der får tid og dato for værdien i Date-objektet. Disse metoder er:
- getHours () - Returnerer timen
- getMinutes () - Returnerer minutterne
- getSeconds () - Returnerer sekunder
- getYear () - Returnerer året ("96" er 1996)
- getMonth () - Returnerer måneden ("0" er januar)
- getDate () - Returnerer dag i måneden
- getDay () - Returnerer ugedagen ("0" er søndag)
(JavaScript's Date-objekt giver også mulighed for at indstille dato og klokkeslæt for Date-objektet, men disse bruges sjældent.)
Konstruktion af et nyt Date-objekt kan tage flere former. For at returnere et objekt, der indeholder den aktuelle dato og klokkeslæt, bruger du objektet Date uden parametre. I det følgende, dato_obj
er et nyt objekt, der indeholder værdien af den aktuelle dato og tid som angivet af computerens systemur.
var date_obj = ny dato ();
Alternativt kan du angive en given dato og et klokkeslæt som en del af datokonstruktøren. En af disse metoder er tilladt - begge indstiller det nye datoobjekt til 1. januar 1997 ved midnat lokal tid.
var date_obj = ny dato ("1. januar 1997 00:00:00")
og
var date_obj = ny dato (97, 0, 1, 12, 0, 0)
Hvis du vil bruge en dato-metode, skal du føje metoden til det datoobjekt, du tidligere har oprettet. Hvis du f.eks. Vil returnere det aktuelle år, skal du bruge:
var nu = ny dato (); var yearNow = now.getYear ();
Til din reference er her metoderne understøttet af JavaScript's Date-objekt.