Índex
Miguel A. Almarza
Departament d'Informàtica
IES Mare de Deu de la Merce



Capítol 2.

Java Script bàsic

  1. Les variables
  2. Els vectors
    1. Declaració de vectors
    2. El vector Elements dels formularis
    3. String com a índex
    4. L'objecte Array
    5. Vectors multidimensionals
  3. Operadors de Java Script
    1. Taula d'operadors
    2. Taula de precedència d'operadors
  4. Sentències de control de fluxe del programa

 

2.1 Les variables

Declaració

Les variables en Java Script es declaren sense fer referència als tipus de dades que han de contenir. És en el moment en que fem l'assignació de dades quan podem dir que aquesta variable és del tipus de dades que conté. També és possible fer ús d'una mateixa variable per a diferents tipus de dades.

Tipus de variables

Numèriques: Els números, tant els enters com els reals, tenen tractament com a números en coma flotant.

Variables de tipus string: Es creen quan assignem un tira de caràcters delimitats amb comentes o amb apòstrofs a a aquesta variable. Quan posem com a delimitador les cometes pot incloure's l'apòstrof  com un caràcter del text i al contrari, si fem ús de l'apòstrof com a delimitador llavors podem incloure les cometes.

Cal fer esment que quan es crea una variable de tipus string en realitat es crea un objecte de tipus String que ens permet fer ús de tots els mètodes i propietats d'aquest objecte.

Amb les següents instruccions es crea una variable (i objecte) de tipus String i accedim a la propietat length (número de caràcters) i als mètodes toUpperCase() i toLowerCase() (passa a lletres majúscules o minúscules):

Objecte String
var Nom="Puig Paalop, Pere";

document.write("Nom a majúscules: ",Nom.toUpperCase(),"<br>");
document.write("Nom a mínúscules: ",Nom.toLowerCase(),"<br>");
document.write("Nom longitut: ",Nom.length,"<br>");

Transformació dels objectes string:
Introduce cadena1
Introduce cadena2
string transformado
cadena1+cadena2
cadena1.bold()
cadena1.substr(3,7)
cadena1.substring(3,7)
cadena1.charAt(3)
cadena1.toLowerCase()
cadena1.toUpperCase()

Variables tipus BOOLEAN: Es creen quan assignem a una variable una de les paraules reservades true o false.

Exemples de variables Visualització per pantalla 
var Num = 5;
document.write("Num té com a dada ",Num,"<p>");
	
Num = "Hola";
document.write("Ara Num té com a dada ",Num,"<p>")
	
var Fet = false;
document.write("Variable lògica Fet: ",Fet,"<p>");
	
var Nom="Puig Paalop, Pere";
document.write("Nom té com a dada: ",Nom,"<p>");
document.write("Nom a majúscules: ",Nom.toUpperCase(),"<br>");
document.write("Nom a mínúscules: ",Nom.toLowerCase(),"<br>");
document.write("Nom longitut: ",Nom.length,"<br>");

Variables globals i variables locals

Les variables declarades fora de qualsevol funció són variables globals i per tant podem fer-ne ús al llarg de tot el codi JavaScript. Las variables declarades dins una funció poden ser locals o globals; si les declarem amb la paraula reservada var les variables són locals a la funció i si no fem ús de la paraula var les variables són globals, encara que declarades dins la funció.

Variables globals i locals Visualització per pantalla 
<script language="Javascript">
<!--
function ProvaVar()
{
   var Mida = 1.98;
   NumeroZ = 45;
   document.write("Variable local Mida: ",Mida,"<br>");
}
-->
</script>
        
<h3>Prova de variables globals i locals</h3>
<script language="Javascript">
<!--
   var Mida = 1.75;
   document.write("Variable global Mida: ",Mida,"<br>");
   ProvaVar();
   document.write("Variable global Mida ", Mida,"<br>");
   document.write("Variable global NumeroZ ",NumeroZ);
--> </script>

Prova de variables globals i locals

2.2 Els vectors

Declaració de vectors

El constructor dels objectes de tipus array permet fer la declaració de vectors de quatre  formes diferents:

Podem veure que els vectors poden contenir dades de diferents tipus en el mateix vector.

També hem de dir que, al contrari que en la major part dels llenguatges, podem fer referència en qualsevol moment a un element que no hi haguem declarat. Es a dir podem incrementar la mida del vector respecte al número d'elements original.

Vectors per a la Loto 6/49 Visualització per pantalla 
<script language="Javascript">
   numSorteado = new Array(6);    function sorteaNumero(nMenor,nMayor)    {       var n= Math.floor(Math.random()*(nMayor - nMenor+1))+nMenor;       return n;    }    function hazSorteo()    {       llenaVector();       numSorteado.sort(ordenCreciente);       presentaVector();    }    function llenaVector()    {       var i=0;       while (i<6)       {          numSorteado[i]=sorteaNumero(1,49);          HaSalido=false;          for(j=0;j<i;j++)          {             if (numSorteado[i]==numSorteado[j])             {                HaSalido=true;             }          }          if (!HaSalido) i++;       }    }    function presentaVector()    {       for(i=1;i<7;i++)          document.formSorteo.elements[i].value=numSorteado[i-1];    } </script>    Fa el sorteig de la loto 6/49<br>    <form name="formSorteo">       <input type="button" value="Fes el sorteig" onClick="hazSorteo()">       <input name="numero1" type="text" value="" size=20>       <input name="numero2" type="text" value="" size=20>       <input name="numero3" type="text" value="" size=20>       <input name="numero4" type="text" value="" size=20>       <input name="numero5" type="text" value="" size=20>       <input name="numero6" type="text" value="" size=20>    </form>
Fa el sorteig de la loto 6/49







Algunes questions importants de l'script
  • Hem declarat un vector de 6 elements com a variable global pels números de la Loto
  • numSorteado = new Array(6);

  • Les funcions que hi tenim són
    • hazSorteo(): Executa les funcions d'omplir el vector, ordenar les seves dades i de presentació de dades.
    • llenaVector(): S'encarrega d'omplir el vector amb números diferents, números entre l'u i el 49. Fa ús de la funció sorteaNumero(nMenor,nMayor).
    • sorteaNumero(nMenor,nMayor): Aquesta funció fa el sorteig d'un número. Rep els extrems del l'interval en el que ha de fer el sorteig. Torna el número sortejat
    • presentaVector(): Aquesta funció s'encarrega de passar els elements del vector als quadres de text.

    El vector Elements dels formularis

    Dins un objecte formulari s'inclouen objectes de diferents tipus. Es crea una propietat del formulari, propietat elements, que en realitat és un vector que ens permet accedir als diferents objectes per mitjà d'un índex.

     Així en el nostre formulari tenim en el lloc 0 d'aquest vector el botó i del lloc 1 al 6 els quadres de text.

     D'aquesta manera tenim que la funció presentaVector arriba a aquest quadres de text de la forma següent:

    for(i=1;i<7;i++) document.formSorteo.elements[i].value=numSorteado[i-1];

String com a índex

Encara existeix una altra manera de declarar un vector, fent ús d'strings com a índex. A l'exemple següent veiem que es declara un vector anomenat Frecuencia que inicialitzem en la manera següent:

Frecuancia["Cara"]=0;
Frecuancia["Cruz"]=0;

D'aquesta manera, es fa ús de les paraules Cara i Cruz com a índex per a accedir a les freqüències.

String com a índex Visualització per pantalla 
<script language="Javascript">
   function Caras()
   {
      var Frecuencia = new Array();
      Frecuencia["Cara"]=0;
      Frecuencia["Cruz"]=0;
      for(i=0;i<10;i++)
      {
         n=sorteaNumero(1,2) - 1;
         if (n==0) Frecuencia["Cara"]++;
         else Frecuencia["Cruz"]++;
      }
      document.frmMoneda.txtCaras.value=Frecuencia["Cara"];
      document.frmMoneda.txtCruces.value=Frecuencia["Cruz"];
   }
</script>
Tirar 10 vegades una moneda

Cares:
Creus:

L'objecte Array

Aquest és un objecte que disposa entre d'altres mètodes el mètode Sort que permet ordenar els elements d'un vector segons el criteri que voldrem. Si tornes a l'script de la Loto 6/49 veuràs que els resultats surten ordenats en ordre de menor a major. La raó és que el codi hi ha els afegits següents:

function ordenCreciente(a1,a2)
{
   if (a1<a2) return -1;
   if (a1==a2) return 0;
   if (a1>a2) return 1;
}
	
function hazSorteo()
{
   llenaVector();
   numSorteado.sort(ordenCreciente);
   presentaVector();
}

Segons veiem el mètode sort de l'objecte Array ha de rebre com a paràmetre el nom de la funció on s'indica el tipus d'ordre que voldrem.

Vectors multi dimensionals

Una matriu bidimensional es pot veure com un vector de vectors fila.
Una matriu tridimensional es pot mirar com un vector de matrius bidimensionals.
Etc.
D'aquesta manera la següent declaració ens crea la matriu bidimensional A de tres files i quatre columnes:

Matrius bidimensionals Visualització per pantalla 
<script language="Javascript">

fila1=new Array(1,2,3,4);
fila2=new Array(1,1,1,1);
fila3=new Array(5,6,7,8);
A=new Array(fila1,fila2,fila3);

for(i=0;i<3;i++)
{
   document.write("<center>");
   for(j=0;j<4;j++) document.write(A[i][j],"   ");
   document.write("</center><br>")
} 
</script>

És molt interesant veure d'aquesta manera les matrius perque podem fer matrius en que les files són registres d'una taula, així la matriu es converteix en una taula de dades.

A l'exemple següent fem una taula 5 alumnes. Fem notar que es crea una funció que construeix aquesta taula en codi HTML per a presentar les dades en el navegador.

Matrius bidimensionals, taules Visualització per pantalla 
<script language="Javascript">

function PresentaTaula(taula,capcalera, files, columnes)
{
   document.write("<table border>");
   document.write("<th>Num</th>");
   for(i=0;i<columnes;i++) document.write("<th>",capcalera[i],"</th>");
   for(i=0;i<files;i++)
   {
      document.write("<tr><td>",i+1,"</td>");
      for(j=0;j<columnes;j++) document.write("<td>",taula[i][j],"</td>");
      document.write("</tr>");
   }
   document.write("</table>")
}

var titols = new Array("Nom","Adreça","Edat");
var Alumne1= new Array("Pep","Calleja s/n",20);
var Alumne2= new Array("Maria","Cantonada s/n",19);
var Alumne3= new Array("Joana","Indret 125",21);
var Alumne4= new Array("Ramon","Indret 12",19);
var Alumne5= new Array("Roque","Indret 55",23);
var alumnesClase = new Array(Alumne1,Alumne2,Alumne3,Alumne4,Alumne5);

PresentaTaula(alumnesClase,titols,5,3);
</script>

2.3 Operadors de Java Script

Taula d'operadors

Aritmètics Asignació
Suma de números i d'strings+=
Resta i canvi de signe-+=
Multiplicació*-=
Divisió/*=
Mòdul%/=
Pre i post increment++%=
Pre i post decrement-- 
Lògics
And, i&&
Or, o¦¦
Not, no!
Comparació
Major que>
Major o igual que>=
Menor que<
Menor o igual que<=
Igual que==
Diferent de!=
Idèntic===
No idèntic!==
Condicional
? :
Operadors lògics de bitsAsignació
AND, i de bits&&=
Or, o de bits¦¦=
XOR, o exclisivo^^=
NOT, no de bits~ 
Desplaçament a l'esquerra<<<<=
Desplaçament a la dreta amb signe>>>>=
Desplaçament dreta amb omplir de ceros>>>>>>=
Comentaris dins el codi
/**/
//
Altres operadors
'
in
instanceof
new
typedef
void

Taula de precedència d'operadors

PrecedènciaEs llegeix deOperadorNom de l'operador
Precedència majorEsquerra a Dreta.Accès a propietat o mètode d'un objecte
 Esquerra a Dreta[  ]Índex d'un vector
 Esquerra a Dreta(  )Crida a una funció
 Dreta a esquerra++Pre/post increment
 Dreta a esquerra--Pre/post decrement
 Dreta a esquerra-Canvi de signe
 Dreta a esquerra~Negació de bits
 Dreta a esquerra!No lògic
 Dreta a esquerradeleteEsborra propietat
 Dreta a esquerranewCrea objecte nou
 Dreta a esquerratypeofTorna tipus de dades
 Dreta a esquerravoidTorna el valor no definit
 Esquerra a Dreta*, /, %Multiplicació, divisió, mòdul
 Esquerra a Dreta+, -Suma, resta
 Esquerra a Dreta+Concatenació d'strings
 Esquerra a Dreta<<Desplaçament a esquerra
 Esquerra a Dreta>>Desplaçament a dreta
 Esquerra a Dreta>>>Desplaçament a dreta amb ceros
 Esquerra a Dreta<, <=Menor i menor o igual
 Esquerra a Dreta>, >=Major i major o igual
 Esquerra a Dreta==Igualdat
 Esquerra a Dreta!=Desigualtat
 Esquerra a Dreta===Identitat
 Esquerra a Dreta!===No idèntic
 Esquerra a Dreta&AND, i de bits
 Esquerra a Dreta^XOR, o exclusiva de bits
 Esquerra a Dreta¦Or, o de bits
 Esquerra a Dreta&&AND, i lògic
 Esquerra a Dreta¦¦OR, o lògic
 Dreta a Esquerra? :Condicional
 Dreta a Esquerra=Assignació
 Dreta a Esquerra*=, /=, +=, -=,
<<=, >>=, >>>=,
&=, ^=, ¦=
Operació més assignació
Precedència menorEsquerra a Dreta.Evaluació múltiple

2.4 Sentències de control de flux del programa

Les sentències alternatives amb if ... else ... i els bucles for, while, i do ...while són iguals que en el llenguatge C. També existeix break i continue. Existeix una petita diferència en la sentència switch que explicarem després amb un petit exemple.

Estructuctures condicionals
if (Expressió certa)
   Sentència;
if (Expressió certa)
   Sentència1;
else
   Sentència2;
if (Expressió certa)
   Sentència1;
else if (Expressió certa)
   Sentència2;
else
   Sentència3;

Bucles
for(Inici, Condició de sortida, Canvis)
{
   Sentència;
}
while (Expressió certa)
{
   Sentència;
}
do
{
   Sentència;
}while (Expressió certa)
for (variable in objecte)
{
   Sentència;
}
Estructura alternativa múltiple
switch (Expressió)
{
   case label1:
      Sentència1;
      break;
   case label2:
      Sentència2;
      break;
   case label3:
      Sentència3;
      break;
.......................
   default:
      Sentència;
}

Sentència with 

En la programació dirigida a objectes hem d'arribar a una propietat a traves de tot un arbre d'objectes amb una sentències d'escriptura molt llarga. Així en el formulari següent, per arribar a la propietat value del segon objecte radio del formulari formColors que pertany a l'objecte document haurem d'escriure:

document.formColors.rdColors[1].value

Es a dir, per accedir a qualsevol objecte del formulari haurem d'escriure document.formColors.

Segons veiem a la funció Colors es fa ús de la sentència with per tal d'estalviar-nos l'escriptura cada vegada que hem de fer referència a aquesta expressió.

Exemple d'ús de with Visualització per pantalla 
<script language="Javascript">
function Colors()
{
   with (document.formColors)
   {
      for(i=0;i<3;i++)
      {
         if (rdColors[i].checked) 
            txtColor.value = rdColors[i].value;
      }
   }
}
</script>

<form name="formColors">
   <input name="txtColor" type="text" value="" size=20><BR>
   <input name="rdColors" type="radio" value="groc" onClick="Colors()">Groc<BR>
   <input name="rdColors" type="radio" value="vermell" onClick="Colors()">Vermell<BR>
   <input name="rdColors" type="radio" value="verd" onClick="Colors()">Verd<BR>
</form>

Groc
Vermell
Verd
Nota: Fem notar que en fer objectes de tipus radio amb el mateix name crea un vector d'objetes tipus radio din el formulari.

La sentència switch

Com veiem a l'exemple següent, tenim dues formes d'ús d'aquesta sentència, en una fem ús d'strings per a distingir els possibles casos i l'altra és la mateixa forma de C en que es distengeixen els casos amb número.

Exemple d'ús de switch Visualització per pantalla 

Primera solució: A l'expressió del switch fem ús d'strings

function Tradueix()
{
   with (document.formColors1)
   {
      txtColorTriat=selColors.options[selColors.selectedIndex].text;
      switch (txtColorTriat)
      {
         case "Vermell" : 
            txtTraduit.value="Rojo";
            break;
         case "Verd" : 
            txtTraduit.value="Verde";
            break;
         case "Blau" : 
            txtTraduit.value="Azul";
            break;
      }
   }
}

Segona solució: A l'expressió del switch fem ús de números

function Tradueix()
{
   with (document.formColors1)
   {
      switch (selColors.selectedIndex)
      {
         case 0: 
            txtTraduit.value="Rojo";
            break;
         case 1: 
            txtTraduit.value="Verde";
            break;
         case 2: 
            txtTraduit.value="Azul";
            break;
      }
   }
}

Formulari formColors1

Tria un color:

Color traduït:

 

 

<form name="formColors1">
   Tria un color: 
   <select name="selColors" onClick="Tradueix()">
      <option selected>Vermell</option>
      <option>Verd</option>
      <option>Blau</option>
   </select>
   Color traduït: 
   <input type="text" name="txtTraduit" value="">
</form>