©ilj@flowsim.se
JavaScript på svenska - elementa 1
- variabler och datatyper

variabler och datatyper
?
Först ett exempel!
Säg att man tänker använda kod som visar en meddelanderuta när användaren klickar på länkar som öppnar ett nytt fönster. Då kan man skriva så här:
 
<A HREF="URL"
ONCLICK="alert('Den här sidan...')">text</A>
<A HREF="URL"
ONCLICK="alert('Den här sidan...')">text</A>
<A HREF="URL"
ONCLICK="alert('Den här sidan...')">text</A>
<A HREF="URL"
ONCLICK="alert('Den här sidan...')">text</A>
 
Om man tänker använda samma text på flera ställen kan det vara en god idé att placera texten i en variabel; man slipper upprepa texten i varje länktagg och det blir enklare att göra ändringar i texten eftersom den finns på ett enda ställe.
När sidan laddas skulle man då kunna definiera en variabel som man kallar t ex meddelande och vars värde är den text som ska visas i meddelanderutan. Så här:
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
meddelande="Den här sidan...!"
//
-->
</SCRIPT>
 
När man sedan använder alert() och vill visa just den här texten behöver man inte skriva hela texten utan bara använda variabeln. Så här:
 
<A HREF="URL"
ONCLICK="alert(meddelande)">text</A>
 
Det ska inte finnas några citationstecken runt variabeln meddelande! Vill man däremot visa en alert med texten "meddelande" ska man använda citationstecken och skriva så här:
 
<A HREF="URL"
ONCLICK="alert('meddelande')">text</A>
 
En variabel är alltså ett namn på ett värde av något slag. En variabel är också motsatsen till en konstant. En konstant har alltid samma värde, en variabels värde kan variera. Man kan t ex använda en variabel som man kallar talet (eller något annat namn) för att hålla reda på hur stort ett bestämt tal är vid olika tillfällen.
Säg att man har en sida med en animation som består av 5 olika bilder och att man vill hålla reda på hur många gånger animationen börjar om från första bilden. Då skulle man kunna deklarera en variabel så här:
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
talet=0
//
-->
</SCRIPT>
 
Variabeln talet sätts alltså till noll när sidan laddas. Varje gång alla fem bilderna i animationen har visats ska talet sedan räknas upp med 1.
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
//animationskod, när femte bilden visas
//så räknas talet upp, så här:
talet=talet+1
//
-->
</SCRIPT>
 
Första gången koden här ovanför utförs är talet lika med 0, resultatet blir alltså talet=0+1, dvs talet antar värdet 1, nästa gång koden utförs har talet värdet 1, resultatet blir alltså talet=1+1, talet är nu lika med 2 etc Om man vill köra animationen fem "varv" kan man alltså använda kod som stoppar animationen om variabeln talet är lika med 5. Så här:
 
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
//animationskod
if(talet==5)
//här följer kod som stoppar animationen
//
-->
</SCRIPT>
 
En variabel måste deklareras någonstans. Koden blir förmodligen tydligast om man gör det i början av skriptet.
I JavaScript kan man deklarera en variabel genom att helt enkelt ge den ett värde. Så här:
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
talet=0
meddelande="Hej!"
//
-->
</SCRIPT>
 
Man kan också använda var. Så här:
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
var talet=0
meddelande="Hej!"
//
-->
</SCRIPT>
 
En variabel kan vara lokal eller global. Om man deklarerar en variabel inne i en funktion och använder var är variabeln lokal. Det innebär att det värde som ligger i variabeln "glöms bort" så fort koden i funktionen är utförd.
En global variabel deklareras normalt utanför alla funktioner. En global variabel - som t ex meddelande i exemplet ovan - finns tillgänglig och kan användas på olika ställen så länge sidan visas. Dvs så länge sidan är uppe kan man få fram det värde, i det här fallet den text, som ligger i variabeln.
Om man i stället deklarerar en variabel meddelande bara som en lokal variabel inne i en funktion, så här:
 
<SCRIPT LANGUAGE="JavaScript"
TYPE="text/javascript">
<!--
function iljalert()
{
var meddelande="Hej!" //en lokal variabel!
alert(meddelande)
}
//
-->
</SCRIPT>
 
så kan man inte använda meddelande någon annanstans. Dvs enda sättet att använda meddelande är att anropa funktionen iljalert() och när det meddelande som definierats där har visats så är variabeln bortglömd. Varje försök att använda variabeln, t ex så här:
 
<A HREF="URL"
ONCLICK="alert(meddelande)">text</A>
 
skulle i det här fallet resultera i ett felmeddelande av typen
 
meddelande is not defined.
 
Att hålla isär lokala och globala variabler är förstås viktigare ju längre och mer komplicerad koden blir. I slutet av den här delsidan finns ett enkelt exempel på vad som kan hända om man inte har koll på vilket värde som för tillfället ligger i en variabel.
 
Till skillnad från många programmeringsspråk behöver man i JavaScript inte tala om vilken typ av data en bestämd variabel ska hålla reda på; samma variabel kan i ena stunden vara ett tal, i den andra en textsträng. Så här:
 
<SCRIPT LANGUAGE="JavaScript">
<!--
meddelande="Hej!" //textsträng
meddelande=3
//-->
</SCRIPT>
Man kan t ex skriva så här (!):
<SCRIPT LANGUAGE="JavaScript">
<!--
minvariabel="Hej! " + 10
minvariabel2="Priset är " + 10 + " kronor."
//-->
</SCRIPT>
Här görs då det numeriska värdet (10) om till en textsträng och vad man får fram om man använder någon av variablerna ovan är alltså en textsträng
"Hej! 10"
resp
"Priset är 10 kronor"
 
En variabel måste i JavaScript börja med en bokstav eller tecknet _. Efter den inledande bokstaven eller strecket kan man förutom dessa tecken också använda siffror. Så här kan en variabel se ut:
 
<SCRIPT LANGUAGE="JavaScript">
<!--
meddelande="Hej!"
MEDDELANDE_1="Hejsan!"
meddelande_1="Hej igen!"
_meddelande="Hej då!"
nytt_meddelande="Hej hej"
meddelande_1 är INTE samma variabel som MEDDELANDE_1!


GLOBAL eller LOKAL?
Säg att man har ett antal länkar på en sida. En klickning på någon av dem ska visa en meddelanderuta med texten "Det här är...!". I endast ett fall ska en annan text - "Finns ej!" - visas. Den text som ska användas flera gånger deklareras som en global variabel meddelande utanför alla funktioner. Den text som ska visas en enda gång definieras inne i en funktion. Så här skulle det skriptet kunna se ut:
 
<SCRIPT LANGUAGE="JavaScript">
<!--
meddelande="Det här är ...!"
//------
function iljalert()
{
meddelande="Finns ej!"
alert(meddelande)
}
//-->
</SCRIPT>
HTML-koden ser ut så här:
<A HREF="javascript:alert(meddelande)">länk1</A>
<A HREF="javascript:alert(meddelande)">länk2</A>
<A HREF="javascript:alert(meddelande)">länk3</A>
<A HREF="javascript:iljalert()">länk4 - finns ej</A>
<A HREF="javascript:alert(meddelande)">länk5</A>
När sidan laddas placeras texten "Det här är...!" i variabeln meddelande och när användaren klickar på länk1 t o m länk3 visas rätt text.
Därefter klickar användaren på länk4; funktionen iljalert() anropas och texten som visas lyder "Finns ej!". Så långt allt väl.
Men, om nu användaren klickar på länk5 (eller på någon av de andra länkarna igen) kommer den text som visas att vara "Finns ej!"; variabeln meddelande fick ju ett nytt värde (nämligen texten "Finns ej!") när funktionen iljalert() anropades.
Ett sätt att undvika det här felet är förstås att deklarera variabeln meddelande i funktionen med var; därmed blir den lokal och antar värdet "Finns ej!" bara tills dess att koden i funktionen är utförd.
 
Exemplet är förstås lite konstruerat, det enklaste i det här fallet skulle förstås vara att skicka med den text som ska visas en enda gång som argument i anropet, så här:
<A HREF="javascript:alert('Finns ej!')">länk4</A>


 
I Javascript finns följande typer av data
tal
t ex 5 och 5.213, ingen skillnad görs mellan heltal och decimaltal
textsträngar (strings)
t ex "Det här är en textsträng!"
logiska (eller booleska*) värden
något kan vara antingen sant (true) eller falskt (false)
null
dvs ingenting
* boolesk [bu:lsk] (eller på engelska Boolean); uppkallat efter den engelske matematikern och logikern George Boole (1815-64).
Ett exempel på användning av boolesk algebra:
Fången A ska välja mellan två dörrar. Den ena leder till friheten, den andra till exekutionsplutonen. A får ställa en enda fråga till någon av de två fångvaktare som bevakar varsin dörr. Frågan ska vara sådan att den kan besvaras med antingen ja eller nej. En av vakterna ljuger, den andre talar sanning. Hur ska frågan lyda?




Sidan gjordes av
 
ilj
 
ilj@flowsim.se
 

 
Senast öndrad 23 januari 1999.
 
Den här sidan hör hemma i ett ramsystem hos:
http://www.flowsim.se