Programmering

Brug af JavaScript's indbyggede objekter

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, lastIndexOfog 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ængdeLængden af ​​en streng

Strengmetoder

ankerOpretter et navngivet anker (hypertekstmål)
storIndstiller tekst til stor
blinkeIndstiller tekst til at blinke
fremhævetSætter tekst til fed skrift
charAtReturnerer tegnet på en bestemt position
fastIndstiller tekst i skrifttype med fast tonehøjde
skrift farveIndstiller skriftfarven
skriftstørrelseIndstiller skriftstørrelse
indeks afReturnerer den første forekomst af tegn x startende fra position y
kursivIndstiller tekst til kursiv
lastIndexOfReturnerer den sidste forekomst af tegn x startende fra position y
linkOpretter et hyperlink
lilleIndstiller tekst til lille
strejkeIndstiller tekst til strejke
underIndstiller tekst til abonnement
underlagReturnerer en del af en streng
supIndstiller tekst til overskrift
toLowerStringKonverterer en streng til små bogstaver
toUpperStringKonverterer 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

EEulers konstant
LN2Den naturlige logaritme af 2
LN10Den naturlige logaritme på 10
LOG2EBasis 2 logaritmen af ​​e
LOG10EBasis 10 logaritmen af ​​e
PIDen numeriske ækvivalent af PI: 3.14 osv.
SQRT1_2Kvadratroden af ​​halvdelen
SQRT2Kvadratroden af ​​2

Matematiske metoder

absReturnerer den absolutte værdi af et tal
acosReturnerer lysbue-cosinus for et tal
som iReturnerer buensinus for et tal
solbrændtReturnerer et tales buetangens
loftReturnerer det mindste heltal større end eller lig med et tal
cosReturnerer cosinus for et tal
ekspReturnerer e (Eulers konstant) til et tal
etageReturnerer det største heltal mindre end eller lig med dets argument
logReturnerer den naturlige logaritme (base e) for et tal
maksReturnerer den største af to værdier
minReturnerer den mindste af to værdier
powReturnerer værdien af ​​et tal gange en specificeret effekt
tilfældigReturnerer et tilfældigt tal (kun X-platforme)
rundReturnerer et tal afrundet til nærmeste hele værdi
syndReturnerer sinus for et tal
sqrtReturnerer kvadratroden af ​​et tal
tanReturnerer 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 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.

$config[zx-auto] not found$config[zx-overlay] not found