Orientació a objectes en JavaScript

Índex
- 1.POO en JavaScript
- 1.1.Introducció
- 1.2.Tipus d'objectes en JavaScript
- 1.3.Principis bàsics de POO en JavaScript
- 1.4.Implementació de POO en JavaScript
- 1.4.1.El concepte de classe i constructor
- 1.4.2.El concepte d'objecte. Instanciació
- 1.4.3.Prototype i __proto__
- 1.4.4.Les propietats
- 1.4.5.Els mètodes
- 1.4.6.Herència
- 1.4.7.Polimorfisme
- 1.4.8.Composició
- 1.5.Alternativa a l'ús de constructors en POO
- 2.Objectes predefinits
- 2.1.Els objectes Object i Function
- 2.1.1.L'objecte Object
- 2.1.2.L'objecte Function
- 2.2.Els objectes Array, Boolean i Date
- 2.2.1.L'objecte Array
- 2.2.2.L'objecte Boolean
- 2.2.3.L'objecte Date
- 2.3.Els objectes Math, Number i String
- 2.3.1.L'objecte Math
- 2.3.2.L'objecte Number
- 2.3.3.L'objecte String
- 2.1.Els objectes Object i Function
- 3.Expressions regulars i ús de galetes
- 3.1.Les expressions regulars
- 3.1.1.Introducció a la sintaxi
- 3.1.2.L'objecte RegExp
- 3.2.Les galetes
- 3.2.1.Maneig de galetes
- 3.2.2.Escriptura, lectura i eliminació de galetes
- 3.2.3.Usos principals de les galetes
- 3.2.4.Limitacions
- 3.3.Web Storage
- 3.3.1.Utilitzar Web Storage
- 3.1.Les expressions regulars
- Activitats
1.POO en JavaScript
1.1.Introducció
1.2.Tipus d'objectes en JavaScript
-
Objectes associats als tipus de dades primitives com String, Number i Boolean, que proporcionen propietats i mètodes per a aquests tipus de dades.
-
Objectes associats a tipus de dades complexes/compostes com Array i Object.
-
Objectes complexos amb un enfocament clar d'utilitat, com per exemple Date per al treball amb dates, Math per al treball amb operacions matemàtiques i RegExp per al treball amb expressions regulars.
1.3.Principis bàsics de POO en JavaScript
-
Polimorfisme ad hoc
Per mitjà de la sobrecàrrega (overloading) de mètodes que permet disposar de diversos mètodes amb el mateix nom però que per mitjà del context en el qual es criden (per exemple, el tipus del paràmetre que rep) poden variar el comportament.
Però, en realitat, aquest tipus de polimorfisme se sol resoldre en temps de compilació, i en el cas de JavaScript, en ser un llenguatge sense una tipificació estricta, es pot simular implementant en la funció o mètode de manera manual aquesta distinció, per exemple mitjançant l'ús de la funció typeof.
-
Polimorfisme paramètric (generics en Java o templates en C++)
Permet a una funció o un tipus de dades ser escrits de manera genèrica, de manera que pot manejar valors de manera idèntica sense dependre del seu tipus.
El fet que en JavaScript no es disposi d'una tipificació estricta pot donar lloc, en determinades situacions, a suportar aquest tipus de polimorfisme
function log (arg) { console.log(arg); }
encara que no ho fa de manera completa, al contrari que TypeScript, un superconjunt de JavaScript creat per Microsoft que permet ser compilat a JavaScript pur i que avança en molts aspectes les capacitats i manera de treballar amb POO del futur estàndard ECMAScript 6 (3) amb el qual intenta estar molt alineat.
TypeScript afegeix funcionalitats a JavaScript, entre elles l'ús de tipus i objectes basats en classes. Està pensat per a ser usat en projectes grans en què l'excessiva “flexibilitat” de JavaScript pot ser un problema.
-
Subtipificació o polimorfisme clàssic
És la forma més habitual de polimorfisme i es basa que el fet que dos objectes comparteixin un mateix pare per mitjà de l'herència ens permet treballar amb els mètodes disponibles en el pare sense haver de preocupar-nos del tipus d'objecte que en realitat estem manipulant, i aquests poden tenir diferent comportament gràcies a la sobreescriptura (overwriting) de mètodes.
1.4.Implementació de POO en JavaScript
1.4.1.El concepte de classe i constructor
function Animal () { }
1.4.2.El concepte d'objecte. Instanciació
function Animal () { } var elmeuAnimal = new Animal();
1.4.3.Prototype i __proto__
1.4.4.Les propietats
-
Propietats estàtiques o de classe
-
Propietats d'objecte (les més habituals i comunament referides com a propietats a seques)
-
Propietats públiques (accessibles externament)
-
Propietats privades (accessibles solament dins de la pròpia classe)
Propietats estàtiques o de classe
function MathUtils() { } MathUtils.factorRadiants = Math.PI/180; MathUtils.factorGraus = 180/Math.PI; var graus = 38; console.log('Radiants: ' + graus * MathUtils.factorRadiants ); // output: 0.6632
Propietats públiques
function Animal (nom) { this.nom = nom; this.pes = 0; this.altura = 0; } var elmeuAnimal = new Animal('Vostè');
function Animal (nom) { this.nom = nom; this.pes = 0; this.altura = 0; } var elmeuAnimal = new Animal('Vostè'); elmeuAnimal.peso = 30; elmeuAnimal.altura = 50;
var elmeuAnimal = new Animal('Vostè'); elmeuAnimal['pes'] = 30; elmeuAnimal['altura'] = 50;
var elmeuAnimal = new Animal("Vostè"); elmeuAnimal["pe"+"so"] = 30;
Propietats privades
function Animal () { var edat = 0; this.nom = ''; this.pes = 0; this.altura = 0; } var elmeuAnimal = new Animal(); console.log(elmeuAnimal.pes); // mostraria "0" per consola console.log(elmeuAnimal.edat); // error, undefined no és accessible
1.4.5.Els mètodes
-
Mètodes estàtics
-
Mètodes d'objecte, que al seu torn es divideixen en:
-
públics
-
privats
-
Mètodes estàtics
function MathUtils() { } MathUtils.factorRadiants = Math.PI/180; MathUtils.factorGraus = 180/Math.PI; MathUtils.arrodonirDecimals = function(num, digits) { return Math.round(num * Math.pow(10,digits)) / Math.pow(10,digits); } console.log( MathUtils.arrodonirDecimals(1.123456789, 3) ); // output: 1.123
Mètodes públics
function Animal (nom) { var edat = 0; this.nom = nom; this.pes = 0; this.altura = 0; } Animal.prototype.néixer = function (pes, altura) { this.pes = pes; this.altura = altura; } Animal.prototype.créixer = function(pes, altura) { this.pes += pes; this.altura += altura; } var elmeuAnimal = new Animal('Vostè'); elmeuAnimal.néixer(2, 10); // neix amb 2 kg i 10 cm elmeuAnimal.créixer(5, 10); // creix 5 kg i 10 cm
var elmeuAnimal = new Animal("Vostè"); elmeuGos['néixer'](2, 10);
Mètodes privats
function Animal (nom) { var edat = 0; var controlEdat = -1; this.nom = nom; this.pes = 0; this.altura = 0; function envellir() { edat += 1; } this.néixer(2, 10); controlEdat = setInterval(envellir, 10000); } Animal.prototype.néixer = function (pes, altura) { this.pes = pes; this.altura = altura; } Animal.prototype.créixer = function(pes, altura) { this.pes += pes; this.altura += altura; } var elmeuAnimal = new Animal('Vostè'); elmeuAnimal.créixer(5, 10); // creix 5 kg i 10 cm
function LamevaClasse() { var privada = 'privada'; var _this = this; this.publica = 'publica'; function metodePrivat() { privada = nouValor; _this.publica = nouValor; _this.metodePublic(); } } LamevaClasse.prototype.metodePublic = function() { }
Mètodes privilegiats
function Animal (nom) { var edat = 0; var controlEdat = -1; this.nom = nom; this.pes = 0; this.altura = 0; this.getEdat = function() { return edat; } this.setEdat = function(novaEdat) { edat = novaEdat; } this.getControlEdat = function() { return controlEdat; } this.initControlEdat = function(pes, altura) { var _this = this; controlEdat = setInterval( function() { _this.envellir(); }, 10000); } } Animal.prototype.envellir = function() { this.setEdat( this.getEdat()+1 ); } Animal.prototype.néixer = function (pes, altura) { this.pes = pes; this.altura = altura; this.initControlEdat(); } Animal.prototype.créixer = function(pes, altura) { this.pes += pes; this.altura += altura; } var elmeuAnimal = new Animal('Vostè'); elmeuAnimal.créixer(5, 10); // creix 5 kg i 10 cm
1.4.6.Herència
function Gos (nom) { this.parent.constructor.call(this,nom); } Gos.prototype = new Animal(); Gos.prototype.constructor = Gos; Gos.prototype.parent = Animal.prototype; Gos.prototype.lladrar = function() { console.log('guau'); } var elmeuGos = new Gos('Vostè'); elmeuGos.créixer(5, 10); // creix 5 kg i 10 cm miPerro.lladrar();
this.parent.constructor.call(this, nom);
1.4.7.Polimorfisme
function LamevaApp() { this.pantallaActual = null; } LamevaApp.PANTALLA_MENU = 'MENU'; LamevaApp.PANTALLA_DETALL = 'DETALL'; LamevaApp.prototype.inicialitzar = function() { this.actualitzarPantalla( LamevaApp.PANTALLA_MENU ); } LamevaApp.prototype.actualitzarPantalla = function(novaPantalla) { if (this.pantallaActual === null || novaPantalla !== this.pantallaActual.getNombre() ) { if (this.pantallaActual !== null) { this.pantallaActual.ocultar(); this.pantallaActual.destruir(); } switch (novaPantalla) { case LamevaApp.PANTALLA_MENU: this.pantallaActual = new PantallaMenu(); break; case LamevaApp.PANTALLA_DETALL: this.pantallaActual = new PantallaDetall(); break; } this.pantallaActual.setNom(novaPantalla); this.pantallaActual.mostrar(); } } function Pantalla () { this._nom = ''; } Pantalla.prototype.setNom = function(nom) { this._nom = nom; } Pantalla.prototype.getNom = function() { return this._nom; } Pantalla.prototype.mostrar = function() { // Codi per a mostrar la pantalla } Pantalla.prototype.ocultar = function() { // Codi per a ocultar la pantalla } Pantalla.prototype.destruir = function() { // Codi per a eliminar la pantalla } function PantallaMenu() { } PantallaMenu.prototype = new Pantalla(); PantallaMenu.prototype.constructor = PantallaMenu; PantallaMenu.prototype.parent = Pantalla.prototype; function PantallaDetall() { } PantallaDetall.prototype = new Pantalla(); PantallaDetall.prototype.constructor = PantallaDetall; PantallaMenu.prototype.parent = Pantalla.prototype; var app = new LamevaApp(); app.inicialitzar();
instanciaPare instanceof ClassePare; // true instanciaPare instanceof ClasseFilla; // false instanciaFilla instanceof ClasseFilla; // true instanciaFilla instanceof ClassePare; // true
1.4.8.Composició
1.5.Alternativa a l'ús de constructors en POO
1.5.1.1 POO basada en prototips i Object.create
if (typeof Object.create !== "function") { Object.create = function (o) { function F() {} F.prototype = o; return new F(); }; }
var persona = { dni: '', nom: '', amics: null, init: function(dni, nom) { this.dni = dni; this.nom = nom; this.amics = new Array(); return this; }, saludar: function() { console.log('Hola em dic '+this.nom); } }; var lameva = Object.create(persona).init('1', 'Marc'); mi.saludar();
var persona = { dni: '', nom: '', amics: null, init: function(dni, nom) { this.dni = dni; this.nom = nom; this.amics = new Array(); return this; }, saludar: function() { console.log('Hola em dic '+this.nom); } }; var estudiant = Object.create(persona); estudiant.estudiar = function() { console.log(this.nom + ' està estudiant.'); }; var jo = Object.create(estudiant).init('1', 'Marc'); jo.saludar(); jo.estudiar();
var persona = { dni: '', nom: '', amics: null, init: function(dni, nom) { this.dni = dni; this.nom = nom; this.amics = new Array(); return this; }, saludar: function() { console.log('Hola em dic '+this.nom); } }; var estudiant = Object.create(persona, { numeroMatricula: { get: function() { return this.value; }, set: function(newValue) { this.value = newValue; } }, init: { value: function(dni, nom, numeroMatricula) { persona.init.call(this, dni, nom); this.numeroMatricula = numeroMatricula; return this; } }, estudiar: { value: function() { console.log('estudiant > '+this.numeroMatricula); } } }); var jo = Object.create(estudiant).init('1','Marc','12'); jo.saludar(); jo.numeroMatricula = '333'; jo.estudiar();
persona.init.call(this, dni, nom);
2.Objectes predefinits
2.1.Els objectes Object i Function
2.1.1.L'objecte Object
var cotxe = new Object(); cotxe.marca = "Ford"; cotxe.model = "Focus"; cotxe.aireAcon = true; cotxe.mostra = function() { alert(this.marca +" "+this.model); }
var adreces = new Object(); adreces["Víctor"] = "Santiago de Cuba"; adreces["Pablo"] = "Madrid"; adreces["Miquel"] = "València";
var adrMiq = adreces["Miquel"];
Nom |
Descripció |
---|---|
constructor |
Referència a la funció que s'ha cridat per a crear l'objecte genèric. |
prototype |
Representa el prototip per a la classe. |
Nom |
Descripció |
---|---|
toString() |
Torna a l'objecte una cadena, de manera predeterminada "[objecte Object]". |
valueOf() |
Torna el valor primitiu associat amb l'objecte, de manera predeterminada "[objecte Object]". |
2.1.2.L'objecte Function
new Function (arg1, arg2..., argN, funció)
-
arg1, arg2,..., argN: paràmetres opcionals, de la funció.
-
funció: és una cadena que conté les sentències que componen la funció.
function llista(tipus) { document.write("<" + tipus + "l>"); for (var i=1; i<llista.arguments.length; i++) { document.write("<li>" + llista.arguments[i]); } document.write("</" + tipus + "l>"); }
llista("u", "U", "Dos", "Tres");
<ul> <li>u <li>Dos <li>Tres </ul>
Nom |
Descripció |
---|---|
arguments |
Array amb els paràmetres que s'han passat a la funció. |
caller |
Nom de la funció que ha cridat la que s'executa. |
constructor |
Referència a la funció que s'ha cridat per a crear l'objecte. |
length |
Nombre de paràmetres que s'han passat a la funció. |
prototype |
Valor a partir del qual es creen les instàncies d'una classe. |
Nom |
Descripció |
Sintaxi |
Paràmetres |
---|---|---|---|
apply |
Crida la funció. |
apply(obj[,arg1,arg2...argN]) |
obj: nom de la funció arg1,..., argN: llista d'arguments de la funció |
call |
Crida la funció. |
call(obj[,args]) |
obj: nom de la funció args: array d'arguments de la funció |
toString |
Retorna una string que representa l'objecte especificat. |
toString() |
|
valueOf |
Retorna el valor primitiu associat a l'objecte. |
valueOf() |
2.2.Els objectes Array, Boolean i Date
2.2.1.L'objecte Array
var vector1 = new Array(); var vector2 = new Array(longitud); var vector3 = new Array(element0, element1,..., elementN);
colors = new Array(16); colors[0] = "Blau"; colors[1] = "Groc"; colors[2] = "Verd";
colors = new Array("Blau", "Vermell", "Verd");
var vector1 = [ ]; var vector2 = [,,,,,,,,,,,,,]; var vector3 = ["element0", "element1",..., "elementN"];
var vector = new Array("Plàtan", "Poma", "Pera"); var fruita1 = vector[0];
var vector1 = [2, 54, 16]; vector1[33] = 25
var vector2 = [2, 4, 6, 8]; var vector3 = vector2; vector3[0] =1;
delete vector1[3];
longitud = vector1.length;
-
Si compara(a,b) és més petit que 0, b té un índex en l'array més petit que a.
-
Si compara(a,b) és 0, no modifica les posicions.
-
Si compara(a,b) és més gran que 0, b té un índex en l'array més gran que a.
function compara(a, b) { if (a < b per un criteri d'ordenació) return -1; if (a > b per un criteri d'ordenació) return 1; return 0; //són iguals }
function compara(a, b){ if (a < b) return -1; else if (a === b) return 0; else return 1; }
numeros = new Array(1, 2, 11); function compara(a, b){ if (a < b) return -1; else if (a === b) return 0; else return 1; } function ordena(){ numeros.sort(compara); document.write(numeros); }
var pila = [ ]; //[ ] pila.push("primer"); //["primer"] pila.push(15, 30); //["primer",15, 30] pila.pop(); //["primer",15] i torna el valor 30
var cua = ["Joan", "Pere", "Andreu", "Vicenç"]; cua.unshift("Clàudia", "Raquel"); //cua contindrà ["Clàudia", "Raquel", "Joan", //"Pere", "Andreu", "Vicenç"] var primer = cua.shift(); //primer contindrà el valor "Clàudia"
var cua = ["Joan", "Pere", "Andreu", "Vicenç"]; cua.push("Clàudia"); //cua contindrà ["Joan","Pere", "Andreu", "Vicenç","Clàudia"] var seguent = cua.shift(); //seguent contindrà el valor "Joan"
var color = ["Vermell", "Verd", "Blau"]; var colorAmp = color.concat("Blanc", "Negre");
var color = ["Vermell", "Verd", "Blau"]; var cadena = color.join("-");
var color = ["Vermell", "Verd", "Blau"]; color.reverse();
var carrera = [21, 25, 12, 23]; carrera.slice(2); //torna [12, 23] carrera.slice(1,3); //torna [25, 12] carrera.slice(-2, -1) //torna [12]
splice(inici, elementsEsborrar, elementsAfegir);
-
inici: indica l'índex a partir del qual es fa l'operació.
-
elementsEsborrar: nombre d'elements que s'eliminen, començant pel que marca el primer paràmetre. Si s'omet aquest paràmetre, s'eliminen tots els elements des del començament fins al final de l'array i, tal com s'ha dit, són tornats (es poden emmagatzemar en una variable).
-
elementsAfegir: llista d'elements separats per comes, no obligatòria, que substitueixen els eliminats.
var carrera = [21, 25, 12, 23]; carrera.splice(2, 2); //torna els elements eliminats [12, 23] i l'array //contindrà els valors [21, 25] carrera.splice(2, 0, 31, 33); //no elimina cap valor i per tant torna [ ] //i afegeix els valors [31, 33] a la cadena
var matriu = [[1,2,3],[4,5,6],[7,8,9]];
matriu[0][1]; //torna el valor 2, ja que accedim al segon //element de la primera array
function mMostra(){ if (this.length != 0) alert(this.join()); else alert("L'array és buida"); } Array.prototype.mostra = mMostra;
Nom |
Descripció |
---|---|
constructor |
Referència a la funció que s'ha cridat per a crear l'array actual. |
length |
És el nombre d'elements de l'array. |
prototype |
Representa el prototip per a la classe. |
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
---|---|---|---|---|
concat |
Concatena dues arrays. |
concat(array2) |
array2: nom de l'array que s'ha de concatenar a la que ha cridat el mètode. |
Array nova, unió de totes dues. |
join |
Uneix tots els elements de l'array en una string, separats pel símbol indicat. |
join(separador) |
separador: signe que separa els elements de l'string. |
String. |
pop |
Esborra el darrer element de l'array. |
pop() |
L'element esborrat. |
|
push |
Afegeix un element o més d'un al final de l'array. |
push(elt1,..., eltN) |
elt1,..., eltN: elements que s'han d'afegir. |
El darrer element afegit. |
reverse |
Trasllada els elements de l'array. |
reverse() |
||
shift |
Elimina el primer element de l'array. |
shift() |
L'element eliminat. |
|
slice |
Extreu una part de l'array. |
slice(inici,final) |
inici: índex inicial de l'array que s'ha d'extreure. final: índex final de l'array que s'ha d'extreure. |
Una array nova amb els elements extrets. |
splice |
Canvia el contingut d'una array, de manera que hi afegeix elements nous i, alhora, elimina els que ja hi havia. |
splice(índex, quants, nouEl1,..., nouElN) |
índex: índex inicial a partir del qual es comença a canviar. quants: nombre d'elements que s'han d'eliminar. nouEl1,..., nouElN: elements que s'han d'afegir. |
Array d'elements eliminats. |
sort |
Ordena els elements de l'array. |
sort(compara) |
compara: funció que defineix l'ordre dels elements. |
|
toString |
Converteix els elements de l'array a text. |
toString() |
String que conté els elements de l'array passats a text. |
|
unshift |
Afegeix un element o més d'un al començament de l'array. |
unshift(elt1,..., eltN) |
elt1,..., eltN: elements que s'han d'afegir. |
La longitud nova de l'array. |
2.2.2.L'objecte Boolean
new Boolean(valor)
Nom |
Descripció |
---|---|
constructor |
Referència a la funció que s'ha cridat per a crear l'objecte. |
prototype |
Representa el prototip per a la classe. |
Nom |
Descripció |
Sintaxi |
Retorn |
---|---|---|---|
toString |
Representa un objecte mitjançant una string. |
toString() |
"true" o "false" segons el valor de l'objecte. |
valueOf |
Obtenir el valor que té l'objecte. |
valueOf() |
string "true" o false" segons el valor que té. |
2.2.3.L'objecte Date
new Date() new Date(any_num, mes_num, dia_num) new Date(any_num, mes_num, dia_num, hora_num, min_num, seg_num)
mesos = new Array("Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"); var data = new Date(); var mes = data.getMonth(); var any = data.getFullYear(); document.write("Avui és" + data.getDate() + "de" + mesos[mes] + "de" + any);
Nom |
Descripció |
---|---|
constructor |
Referència a la funció que s'ha cridat per a crear l'objecte. |
prototype |
Representa el prototip per a la classe. És de lectura i prou. |
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
---|---|---|---|---|
getDate |
Retorna el dia del mes per a una data. |
getDate() |
Enter entre 1 i 31. |
|
getDay |
Retorna el dia de la setmana per a una data. |
getDay() |
Enter entre 0 i 6. El 0 és diumenge, l'1 és dilluns, etc. |
|
getHours |
Retorna l'hora per a una data. |
getHours() |
Enter entre 0 i 23. |
|
getMinutes |
Retorna els minuts per a una data. |
getMinutes() |
Enter entre 0 i 59. |
|
getMonth |
Retorna el mes per a una data. |
getMonth() |
Enter entre 0 i 11. |
|
getSeconds |
Retorna els segons per a una data. |
getSeconds() |
Enter entre 0 i 59. |
|
getTime |
Retorna un nombre que correspon al temps transcorregut per a una data. |
getTime() |
Nombre de mil·lisegons transcorreguts des de l'1 de gener de 1970 a les 00.00.00 hores. |
|
getTimezoneOffset |
Retorna la diferència horària, entre l'hora local i l'hora GMT (Greenwich mean time). |
getTimezoneOffset() |
Nombre de minuts que marca la diferència horària. |
|
getFullYear |
Retorna l'any per a una data. |
getFullYear() |
Retorna tots quatre dígits. |
|
parse |
String que conté els mil·lisegons transcorreguts per a la data. |
Date.parse(dataString) |
dataString: data en format string. |
Mil·lisegons transcorreguts des de l'1 de gener de 1970 a les 00.00.00 hores. |
setDate |
Posa el dia a una data. |
setDate(valordia) |
valordia: enter entre 1 i 31 que representa el dia. |
|
setDay |
Posa el dia a una data. |
setDate(valordia) |
valordia: enter entre 1 i 31 que representa el dia. |
|
setHours |
Posa l'hora a una data. |
setHours(valorhora) |
valorhora: enter entre 0 i 23 que representa l'hora. |
|
setMinutes |
Posa els minuts a una data. |
setMinutes(valorminuts) |
valorminuts: enter entre 0 i 59 que representa els minuts. |
|
setMonth |
Posa el mes a una data. |
setMonth(valormes) |
valormes: enter entre 0 i 11 que representa el mes. |
|
setSeconds |
Posa els segons a una data. |
setSeconds(valorsegons) |
valorsegons: enter entre 0 i 59 que representa els segons. |
|
setTime |
Posa el valor a una data. |
setTime(valorhorari) |
valorhorari: mil·lisegons transcorreguts des de l'1 de gener de 1970 a les 00.00.00 hores. |
|
setYear |
Posa l'any a una data. |
setYear(valorany) |
valorany: enter que representa l'any. |
|
toGMTString |
Converteix una data a string, fent servir les convencions GMT d'Internet. |
toGMTString() |
||
toLocaleString |
Converteix una data a string, fent servir les convencions locals. Vegeu retorn. |
toLocaleString() |
Exemple: dissabte, 07 de desembre de 2002 21.22.59. |
|
toLocaleDateString |
Converteix una data a string, fent servir les convencions locals. Vegeu retorn. |
toLocaleDateString() |
Exemple: Sat Dec 7 21:22:59 UTC+0100 2002. |
|
toLocaleTimeString |
Converteix una data a string, fent servir les convencions locals. |
|||
UTC |
Mil·lisegons transcorreguts per a la data indicada. |
Date.UTC(any, mes, dia, hores, min, s) |
Enters. Els tres darrers són opcionals. |
Mil·lisegons transcorreguts des de l'1 de gener de 1970 a les 00.00.00 hores. |
2.3.Els objectes Math, Number i String
2.3.1.L'objecte Math
function calcula(nombre){ cosValue = Math.cos(nombre); //Emmagatzema a cosValue el valor del cosinus sinValue = Math.sin(nombre); //Emmagatzema a sinValue el valor del sinus tanValue = Math.tan(nombre); //Emmagatzema a cosValue el valor de la tangent sqrtValue = Math.sqrt(nombre); //Emmagatzema a sqrtValue el valor de l'arrel powValue = Math.pow(nombre,3); //Emmagatzema a powValue el valor d'elevar a 3 el valor expValue = Math.exp(nombre); //Emmagatzema a expValue el valor de e elevat al valor del nombre }
Nom |
Descripció |
Exemple |
---|---|---|
E |
Constant d'Euler. El valor aproximat que té és 2,718. És només de lectura. |
function valorE() { |
LN10 |
Logaritme neperià de 10. El valor aproximat que té és 2,302. És només de lectura. |
function valorLN10() { |
LN2 |
Logaritme neperià de 2. El valor aproximat que té és 0,693. És només de lectura. |
function valorLN2() { |
LOG10E |
Logaritme en base 10 del nombre E. El valor aproximat que té és 0,434. És només de lectura. |
function valorLog10e() { |
LOG2E |
Logaritme en base 2 del nombre E. El valor aproximat que té és 1,442. És només de lectura. |
function valorLog2e() { |
PI |
Nombre pi. El valor aproximat que té és 3,1415. És només de lectura. |
function valorPi() { |
SQRT1_2 |
1 dividit per l'arrel quadrada de 2. El valor aproximat que té és 0,707. És només de lectura. |
function valorSQRT1_2() { |
SQRT2 |
Arrel quadrada de 2. El valor aproximat que té és 1,414. És només de lectura. |
function valorSQRT2() { |
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
---|---|---|---|---|
abs |
Calcula el valor absolut d'un nombre. |
abs(x) |
x: un nombre. |
Valor absolut de x. |
acos |
Calcula l'arc cosinus d'un nombre. |
acos(x) |
x: un nombre. |
Valor de l'arc cosinus de x en radiants. Valor entre [0, PI]. |
asin |
Calcula l'arc sinus d'un nombre. |
asin(x) |
x: un nombre. |
Valor de l'arc sinus de x en radiants. Valor entre [-PI/2,PI/2]. |
atan |
Calcula l'arc tangent d'un nombre. |
atan(x) |
x: un nombre. |
Valor de l'arc tangent de x en radiants. Valor entre [-PI/2,PI/2]. |
atan2 |
Calcula l'arc tangent del quocient de dos nombres. |
atan2(y,x) |
y: un nombre (coordenada y). x: un nombre (coordenada x). |
|
ceil |
Retorna, més gran o igual que un nombre, l'enter més petit. |
ceil(x) |
x: un nombre. |
El primer enter més gran o igual que x (per a 9,8 en retorna 10). |
cos |
Calcula el cosinus d'un nombre. |
cos(x) |
x: un nombre. |
Valor del cosinus de x. Valor entre [-1,1]. |
exp |
Calcula el valor del nombre E elevat a un nombre. |
exp(x) |
x: un nombre. |
Valor de Ex. |
floor |
Retorna, més petit o igual que un nombre, l'enter més gran. |
floor(x) |
x: un nombre. |
El primer enter més petit o igual que x (per a 9,8 en retorna 9). |
log |
Calcula el logaritme en base E d'un nombre. |
log(x) |
x: un nombre. |
El logaritme en base E de x. |
max |
Retorna el més gran de dos nombres. |
max(x,y) |
x: un nombre. y: un nombre. |
Si x > y, retorna x. Si y > x, retorna y. |
min |
Retorna el més petit de dos nombres. |
min(x,y) |
x: un nombre. y: un nombre. |
Si x > y, retorna y. Si y > x, retorna x. |
pow |
Calcula la potència entre dos nombres. |
pow(x,y) |
x: un nombre que representa la base. y: un nombre que representa l'exponent. |
Valor de xy. |
random |
Retorna un nombre aleatori entre 0 i 1. |
random() |
Nombre aleatori entre [0,1]. |
|
round |
Arrodoneix un nombre a l'enter més proper. |
round(x) |
x: un nombre. |
El valor arrodonit de x. |
sin |
Calcula el sinus d'un nombre. |
sin(x) |
x: un nombre. |
Valor del sinus de x. Valor entre [-1,1]. |
sqrt |
Calcula l'arrel quadrada d'un nombre. |
sqrt(x) |
x: un nombre. |
Arrel quadrada de x. |
tan |
Calcula la tangent d'un nombre. |
tan(x) |
x: un nombre. |
Valor de la tangent de x. |
2.3.2.L'objecte Number
new Number (valor)
Nom |
Descripció |
Exemple d'ús |
---|---|---|
Constructor |
Referència a la funció que s'ha cridat per a crear l'objecte. |
|
MAX_VALUE |
És el valor numèric més gran que es pot representar en JavaScript. És només de lectura. |
if (nombre < = Number.MAX_VALUE) lamevaFuncio(nombre) else alert("nombre massa gran") |
MIN_VALUE |
És el valor numèric més petit que es pot representar en JavaScript. És només de lectura. |
if (nombre >= Number.MIN_VALUE) lamevaFuncio(nombre) else lamevaFuncio(0) |
NaN |
Indica que no es tracta d'un valor numèric (Not-A-Number). És només de lectura. |
|
NEGATIVE_INFINITY |
Representa el valor negatiu infinit. És només de lectura. |
|
POSITIVE_INFINITY |
Representa el valor positiu infinit. És només de lectura. |
|
Prototype |
Representa el prototip per a la classe. |
-
El nombre més gran que es pot representar en JavaScript és 1.79E+308. Els valors més grans que aquest adquireixen el valor Infinity.
-
El nombre més petit que es pot representar en JavaScript és 5E-324. La propietat MIN_VALUE no representa el nombre negatiu més petit, sinó el positiu, més pròxim al 0, que pot representar el llenguatge. Els valors més petits que aquest es converteixen en 0.
-
Les propietats MAX_VALUE, MIN_VALUE, POSITIVE_INFINITY i NEGATIVE_INFINITY són estàtiques. Per tant, s'han d'utilitzar amb l'objecte mateix, per exemple: Number.MAX_VALUE.
-
Per a veure el valor de la propietat NaN, s'ha de fer servir la funció isNaN.
-
Un valor més petit que NEGATIVE_INFINITY es visualitza com a -Infinity.
-
Un valor més gran que POSITIVE_INFINITY es visualitza com a Infinity.
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
---|---|---|---|---|
toExponential |
Expressa un nombre en notació exponencial. |
toExponential(n) |
n: nombre de decimals |
String |
toFixed |
Per a arrodonir a partir del nombre de decimals indicat. |
toFixed(n) |
n: nombre de decimals |
String |
toString |
String que representa l'objecte especificat. |
toString([base]) |
base: nombre entre 2 i 16 que indica la base en què es representa el nombre. |
String |
toPrecision |
La dada expressada segons la precisió indicada. |
toPrecision(n) |
n: nombre de dígits de precisió. |
String |
valueOf |
Obté el valor que té l'objecte. |
valueOf() |
String |
2.3.3.L'objecte String
new String(text)
var cadena = "Hola, Món"; longitud = cadena.length;
var cadena = "Hola, Món"; cadena.toUpperCase();
var cadena = "Hola, Món"; cadena = cadena.toUpperCase();
var cadena = "Hola, Món"; caracter = cadena.charAt(2); //La variable caracter recupera el valor "l".
var cadena = "Hola, Món"; posicio = cadena.indexOf("Món"); //La variable posicio recupera el valor 6.
var cadena = "Hola, Món"; posicio = cadena.indexOf("ó",3); //La variable posicio recupera el valor 7.
var cadena = "Hola, Món"; posicio = cadena.lastIndexOf("o",3); //La variable posicio recupera el valor 1.
var cadena = "Hola, Món"; var subCadena = cadena.substring(5); //subCadena adquireix el valor " Món" var subCadena2 = cadena.substring(5,7); //subCadena2 adquireix el valor " M"
var cadena = "Hola, Món"; var cadena2 = cadena.concat(" lliure ", "i feliç"); //cadena2 adquireix el valor "Hola, Món lliure i feliç"
var cadena2 = cadena + " lliure " + "i feliç";
var vector = "Hola, Món lliure".split(" ");
Nom |
Descripció |
Exemple |
---|---|---|
constructor |
Referència a la funció que s'ha cridat per a crear l'objecte. |
|
length |
Longitud de l'string |
var tema = "Programació" alert("La longitud de la paraula Programació és " + tema.length) |
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
---|---|---|---|---|
anchor |
Crea una àncora HTML. |
anchor(nom_ancora) |
nom_ancora: text per a l'atribut NAME de l'etiqueta < A NAME=. |
|
big |
Mostra un text en lletres grans. |
big() |
||
blink |
Mostra el text parpellejant. |
blink() |
||
bold |
Mostra el text en negreta. |
bold() |
||
charAt |
Retorna un caràcter del text, el que és en la posició indicada. |
charAt(índex) |
índex: nombre entre 0 i la longitud-1 del text. |
Caràcter del text que és en la posició indicada pel paràmetre. |
charCodeAt |
Retorna el codi ISO-Latin-1 del caràcter que és en la posició indicada. |
charCodeAt(índex) |
índex: nombre entre 0 i la longitud-1 del text. |
Codi del caràcter que és en la posició indicada pel paràmetre. |
concat |
Uneix dues cadenes de text. |
concat(text2) |
text2: cadena de text que s'ha d'unir a la que crida el mètode. |
String resultat de la unió de les altres dues. |
fixed |
Mostra el tipus amb font de lletra teletip. |
fixed() |
||
fontcolor |
Mostra el text en el color especificat. |
fontcolor(color) |
color: color per al text. |
|
fontsize |
Mostra el text en la grandària especificada. |
fontsize(size) |
size: grandària per al text. |
|
fromCharCode |
Retorna el text creat a partir de caràcters en codi ISO-Latin-1. |
fromCharCode(num1, ..., numN) |
numN: codis ISO-Latin-1 |
String |
indexOf |
Retorna l'índex en què hi ha per primera vegada la seqüència de caràcters especificada. |
indexOf(valor, inici) |
valor: caràcter o caràcters que s'han de buscar. inici: índex a partir del qual comença a buscar. |
Nombre que indica l'índex. Retorna -1 si no es troba el valor especificat. |
italics |
Mostra el text en cursiva. |
italics() |
||
lastIndexOf |
Retorna l'índex en què hi ha per darrera vegada la seqüència de caràcters especificada. |
lastIndexOf(valor, inici) |
valor: caràcter o caràcters que s'han de buscar. inici: índex a partir del qual comença a buscar. |
Nombre que indica l'índex. Retorna -1 si no es troba el valor especificat. |
link |
Crea un enllaç HTML. |
link(href) |
href: string que especifica la destinació de l'enllaç. |
|
match |
Retorna les parts del text que coincideixen amb l'expressió regular indicada. |
match(exp) |
exp: expressió. Pot incloure els indicadors /f (global) i /i (ignorar majúscules i minúscules). |
Array que conté els textos que s'han trobat. |
replace |
Substitueix una part del text pel text nou indicat. |
replace(exp, text2) |
exp: expressió regular per a fer la cerca del text que s'ha de substituir. text2: text que substitueix el que s'ha trobat. |
String nova. |
search |
Retorna l'índex del text que s'ha indicat en l'expressió regular. |
search(exp) |
exp: expressió per a fer la cerca. |
|
slice |
Extreu una porció de l'string. |
slice(inici,[final]) |
inici: índex del primer caràcter que s'ha d'extreure. final: índex del darrer caràcter que s'ha d'extreure. Pot ser negatiu, i llavors indica quants en cal restar des del final. Si no s'hi indica, extreu fins i tot el final. |
String que conté els caràcters que hi havia entre inici i final. |
small |
Mostra el text en font petita. |
small() |
||
split |
Crea una array, i separa el text segons el separador indicat. |
split([separador], [límit]) |
separador: caràcter que indica per on s'ha de separar. Si s'omet, l'array només contindrà un element, que és l'string completa. límit: indica el nombre màxim de parts per a posar en l'array. |
Array. |
strike |
Mostra el text ratllat. |
strike() |
||
sub |
Mostra el text com a subíndex. |
sub() |
||
substr |
Retorna una porció del text. |
substr(inici, [longitud]) |
inici: índex del primer caràcter per extreure. longitud: nombre de caràcters per extreure. Si s'omet, s'extreu fins al final de l'string. |
String. |
substring |
Retorna una porció del text. |
substring(inici, final) |
inici: índex del primer caràcter que s'ha d'extreure. final: índex+1 del darrer caràcter que s'ha d'extreure. |
|
sup |
Mostra el text com a superíndex. |
sup() |
||
toLocaleLowerCase |
Converteix el text a minúscules, tenint en compte el llenguatge de l'usuari. |
toLocaleLowerCase() |
String nova en minúscules. |
|
toLocaleUpperCase |
Converteix el text a majúscules, tenint en compte el llenguatge de l'usuari. |
toLocaleUpperCase() |
String nova en majúscules. |
|
toLowerCase |
Converteix el text a minúscules. |
toLowerCase() |
String nova en minúscules. |
|
toUpperCase |
Converteix el text a majúscules. |
toUpperCase() |
String nova en majúscules. |
|
toString |
Obté l'string que representa l'objecte. |
toString() |
String. |
|
valueOf |
Obté l'string que representa el valor de l'objecte. |
valueOf() |
String. |
3.Expressions regulars i ús de galetes
3.1.Les expressions regulars
3.1.1.Introducció a la sintaxi
dir *.exe,
var patro = /Cubo/;
var patro = new RegExp("Cubo");
var patro = /Cub[ao]/;
var patro = /Cub[0-9]/;
var patro = /Cub[0-9a-z]/;
-
+: indica que el que té a l’esquerra pot estar 1 o més vegades.
-
*: indica que pot estar 0 o més vegades (en el cas de +, el nombre o la minúscula hauria d'aparèixer almenys 1 vegada, amb * Cub també s'acceptaria).
-
?: indica opcionalitat, és a dir, el que es té a l'esquerra pot aparèixer o no (pot aparèixer 0 o 1 vegades).
-
{}: serveix per a indicar exactament el nombre de vegades que pot aparèixer o un rang de valors. Per exemple, {3} indica que ha d'aparèixer exactament 3 vegades, {3,8} indica que ha d'aparèixer entre 3 i 8 vegades i {3,} indica que ha d'aparèixer almenys 3 vegades.
var patro = /Cub[ao]{2}/; document.write("Cubocuba".search(patro)); document.write("Cuboa".search(patro));
var patro = /^aa/; //Es busca la cadena aa a l'inici de la cadena var patro = /uu$/; //Es busca la cadena uu al final de la cadena
-
\d: un dígit, equival a [0-9].
-
\D: qualsevol caràcter que no sigui un dígit.
-
\w: qualsevol caràcter alfanumèric, equival a [a-zA-Z0-9_].
-
\W: qualsevol caràcter no alfanumèric.
-
\s: espai.
-
\t: tabulador.
https://www.regular-expressions.info/
3.1.2.L'objecte RegExp
new RegExp("patró", "indicador")
-
patro és text de l'expressió regular.
-
indicador és opcional i pot prendre tres valors:
-
g: s’han de tenir en compte totes les vegades que l'expressió apareix en la cadena.
-
i: ignora majúscules i minúscules.
-
gi: tenen efecte les dues opcions, g i i.
-
Caràcters especials en expressions regulars |
|
---|---|
\ |
Per als caràcters que normalment s'interpreten com a literals, indica que el caràcter que el segueix no s'ha d'interpretar com un literal. Per exemple: /b/ s'interpretaria com a “b”, però /\b/ s'interpretaria com a indicador de límit de paraula. Per als caràcters que normalment no s'interpreten com a literals, indica que en aquest cas sí ha d'interpretar-se com un literal i no com un caràcter especial. Per exemple, * és un caràcter especial que s'utilitza com a comodí, /a*/ pot significar cap o diverses a. Si l'expressió conté /a\*/ s'interpreta com el literal “a*” |
^ |
Indica inici de línia. Per exemple, /^A/ no trobarà l'A en la cadena “HOLA”, però sí la trobarà a “Alarma”. |
$ |
Indica final de línia. Per exemple, /$A/ no trobarà l'A en la cadena “ADEU”, però sí la trobarà a “HOLA”. |
* |
Indica que el caràcter que el precedeix pot aparèixer cap o diverses vegades. Per exemple, /ho*/ es trobarà a “hola”, “hoooola”, i també a “heura”, però no a “camell”. |
+ |
Indica que el caràcter que el precedeix pot aparèixer una o diverses vegades. Per exemple, /ho+/ es trobarà a “hola” i “hoooola”, però no a “heura” ni a “camell”. |
? |
Indica que el caràcter que el precedeix pot aparèixer cap o una vegada. Per exemple, /ho?/ es trobarà a “hola” i “heura”, però no a “hoooola” ni a ”camell”. |
. |
Indica un únic caràcter a excepció del salt de línia. Per exemple, /.o/ es trobarà a “hola” però no a “camell”. |
(x) |
Indica que a més de buscar el valor x, es repetirà la cerca entre el resultat de la primera cerca. Per exemple, en la frase “hola, t'espero a l'hotel d'holanda”, /(holan*)/ trobaria “hola”, “holan”, i “hola” (l'últim “hola” és part de “holan”). |
x|y |
Indica el valor de x o el de y. Per exemple, /sol|vent/ trobaria “sol” en la frase “Fa sol a Sevilla”. |
{n} |
Indica quantes vegades exactes ha d'aparèixer el valor que el precedeix (n és un enter positiu). Per exemple, /o{4}/ es trobaria a “hoooola” però no a “hola”. |
{n,} |
Indica quantes vegades com a mínim ha d'aparèixer el caràcter que el precedeix (n és un enter positiu). Per exemple, /o{2,}/ es trobaria a “hoooola” i “hoola” però no a “hola”. |
{n,m} |
Indica el nombre mínim i màxim de vegades que pot aparèixer el caràcter que el precedeix (n i m són enters positius). Per exemple, /o(1,2)/ es trobaria a “hola” i “hoola”, però no a “hoooola”. |
[xyz] |
Indica qualsevol dels valors entre claudàtors. Els elements continguts expressen un rang de valors, per exemple [abcd] podria expressar-se també com [a-d]. |
[^xyz] |
Busca qualsevol valor que no aparegui entre claudàtors. Els elements continguts expressen un rang de valors, per exemple [^abcd] podria expressar-se també com a [^a-d]. |
[\b] |
Indica un backspace. |
\b |
Indica un delimitador de paraula, com un espai. Per exemple, /\bn/ es troba a “llúdria” però no en “mico”, i /n\b/ en “camaleó” però no a “mico”. |
\B |
Indica que no pot haver-hi delimitador de paraula, com un espai. Per exemple, /\Bn/ es troba a “mico” però no a “llúdria” i a “camaleó”. |
\cX |
Indica un caràcter de control (X és el caràcter de control). Per exemple, /cM/ indica Ctrl+M. |
\d |
Indica que el caràcter és un dígit. També pot expressar-se com a /[0-9]/.Per exemple, /\d/ a “carrer peix, núm. 9” trobaria 9. |
\D |
Indica que el caràcter no és un dígit. /\D/ també pot expressar-se com a /[^0-9]/. |
\f |
Indica salt de pàgina (form-feed). |
\n |
Indica salt de línia (linefeed). |
\r |
Indica retorn de carro. |
\s |
Indica un espai en blanc que pot ser l'espai, el tabulador, el salt de pàgina i el salt de línia. Per tant, és equivalent a posar [\f\n\r\t\v]. |
\S |
Indica un únic caràcter diferent de l'espai, del tabulador, del salt de pàgina i del salt de línia. Per tant, és equivalent a posar [^\f\n\r\t\v]. |
\t |
Indica el tabulador. |
\v |
Indica un tabulador vertical. |
\w |
Indica qualsevol caràcter alfanumèric incloent el _ És equivalent a posar [A-Za-z0-9_]. |
\n |
n és un valor que fa referència al parèntesi anterior (explica els parèntesis oberts). Per exemple, a “poma, taronja, pera, préssec”, l'expressió /poma(,)\staronja \1/ trobaria “poma, taronja”. |
\ooctal \xhex |
Permet incloure codis ASCII en expressions regulars. Per a valors octals i hexadecimals. o i x prendrien els valors, per exemple, \2Fhex. |
Propietats de l'objecte RegExp |
|
---|---|
Nom |
Descripció |
$1, ..., $9 |
Contenen les parts de l'expressió contingudes entre parèntesis. És només de lectura. |
$_ |
Vegeu la propietat input. |
$* |
Vegeu la propietat multiline. |
$& |
Vegeu la propietat lastMatch. |
$+ |
Vegeu la propietat lastParen. |
$` |
Vegeu la propietat leftContext. |
$' |
Vegeu la propietat rightContext. |
global |
Indica si s'usa l'indicador “g” en l'expressió regular. Podem tenir els valors true (si s'usa l'indicador “g”) i false en cas contrari. És de solament lectura. |
ignoreCase |
Indica si s'usa l'indicador “i” en l'expressió regular. Puc tenir els valors true (si s'usa l'indicador “i”) i false en cas contrari. És només de lectura. |
input |
Representa l’string sobre el qual s'aplica l'expressió regular. També es diu $_. És estàtica, per la qual cosa s'usa de la forma: RegExp.input |
lastIndex |
Especifica l'índex a partir del qual es pot aplicar l'expressió regular. |
lastMatch |
Representa l'últim ítem oposat. També es diu $&. És estàtica, per la qual cosa s'usa de la forma: RegExp. lastMatch. És només de lectura. |
lastParen |
Representa l'últim ítem oposat per una expressió de parèntesi. També es diu $+. És estàtica, per la qual cosa s'usa de la forma: RegExp. lastParen. És només de lectura. |
leftContext |
Representa el substring que precedeix a l'últim ítem oposat. També es diu $`. És estàtica, per la qual cosa s'usa de la forma: RegExp. leftContext És només de lectura. |
multicine |
Indica si s'aplicarà la cerca en diverses línies. Els seus possibles valors són true i false. També es diu $*. És estàtica, per la qual cosa s'usa de la forma: RegExp. multiline. |
prototype |
Representa el prototip per a la classe. |
rightContext |
Representa el substring que segueix a l'últim ítem oposat. També es diu $'. És estàtica, per la qual cosa s'usa de la forma: RegExp. rightContext És només de lectura. |
source |
Representa l’string que conté el patró per a l'expressió regular, excloent les \ i els indicadors “i” i “g”. És només de lectura. |
Mètodes de l'objecte RegExp |
||||
---|---|---|---|---|
Nom |
Descripció |
Sintaxi |
Paràmetres |
Retorn |
compile |
Compila l'expressió regular durant l'execució d'un script. |
regexp.compile(patro, [indicadors]) |
patro: text de l'expressió regular. indicadors: “g” i/o “i”. |
|
Exec |
Executa la cerca. |
regexp.exec(str) regexp(str) |
str: string sobre el qual s'aplica la cerca. |
Un array amb els ítems oposats. |
test |
Executa la cerca. |
regexp.test(str) |
str: string sobre el qual s'aplica la cerca. |
true si troba algun ítem, false en cas contrari. |
3.2.Les galetes
nom=valor [;expires=dataGMT] [;domain=domini] [;path=ruta] [;secure]
-
nom=valor: defineix el nom de la galeta i el valor que emmagatzemarà.
-
expires=dataGMT: estableix la data de caducitat de la galeta, aquesta data ha d'establir-se en format GMT, per la qual cosa serà útil el mètode toGMTString() de l'objecte Date. Aquest paràmetre és opcional, de manera que, quan una galeta no té establerta una data de caducitat, aquesta es destrueix quan l'usuari tanca el navegador. En aquest cas es diu que la galeta és de sessió. Les galetes que tenen establerta una data de caducitat es coneixen com a galetes persistents.
-
domain=domini: estableix el domini que ha assignat la galeta, de manera que aquesta solament es retornarà davant una petició d'aquest, per exemple, domain=www.uoc.edu implica que la galeta solament es retorna al servidor www.uoc.edu quan s'estableix una connexió amb aquest. Si no s'estableix cap valor, és el mateix navegador el que estableix el valor del domini que ha creat la galeta.
-
path=ruta: estableix una ruta específica del domini sobre la qual es retornarà la galeta. Si no s'estableix, la ruta per defecte assignada pel navegador és la ruta des d'on s'ha creat la galeta.
-
secure: si s'indica aquest valor, la galeta solament es retorna quan s'ha establert una comunicació segura mitjançant HTTPS. Si no s'assigna aquest valor, el navegador retorna la galeta en connexions no segures HTTP.
nom=Victor; email=vriospazos@uoc.edu
3.2.1.Maneig de galetes
document.cookie="nom=Victor; expires=Sun, 14-Dec-2010 08:00:00 GMT; path=/fitxers";
3.2.2.Escriptura, lectura i eliminació de galetes
function assignaCookie(nom,valor,dies){ if (typeof(dies) == "undefined"){ //Si no es passa del paràmetre dies, la cookie és de sessió document.cookie = nom + "=" + valor; } else { //Es crea un objecte Date al qual s'assigna la data actual //i s'hi afegeixen els dies de caducitat transformats en //mil·lisegons var caduca = new Date; caduca.setTime(dataCaduca.getTime() + dies*24*3600000); document.cookie = nom + "=" + valor +";expires=" + caduca.toGMTString(); } }
document.cookie= "nom=Victor"; document.cookie="email=vriospazos@uoc.edu"
"nombre=Victor; email=vriospazos@uoc.edu"
//SEs crea l'objecte que contindrà l'array associativa cookies[nom] = valor var cookies = new Object(); //Es defineix la funció que analitza la cadena i crea l'array a partir de la cadena //document.cookie, i es comproven certes situacions especials function extreuCookies(){ //Variables que emmagatzemaran les cadenes nom i valor var nom, valor; //Variables que controlaran els límits que marquen la posició de les //diverses cookies a la cadena var inici, mig, final; //El bucle següent comprova si hi ha alguna entrada en l'array //associativa, de manera que si es així, es crea una instància nova de //l'objecte cookies per a eliminar-les for (name in cookies){ cookies = new Object(); break; } inici = 0; //Es fa un bucle que captura a cada pas el nom i valor de //cada cookie de la cadena i l'assigna a l'array associativa while (inici< document.cookie.length){ //la variable medio almacena la posición del próximo carácter "=" medio = document.cookie.indexOf('=', inicio); //lla variable mig emmagatzema la posició del pròxim caràcter ";" final = document.cookie.indexOf(';',inici); //El següent if comprova si final adquireix el valor -1 que indica //que no s'ha trobat cap caràcter ";", cosa que indica que //s'ha arribat a la darrera cookie i, per tant, s'assigna a la //variable final la longitud de la cadena if (final == -1) { final = document.cookie.length; } //El següent if fa dues comprovacions; en primer lloc, si //mig és més gran que final o mig és -1 (que indica que no //s'ha trobat cap caràcter "="), la cookie té nom però //no valor assignat //En l'altre cas el nom de la cookie és entre els //caràcters que hi ha entre inici i mig i el valor de la cookie //entre els caràcters que hi ha entre mig+1 i final if ( (mig > final) || (mig == -1) ) { nom = document.cookie.substring(inici, final); valor = ""; } else { nom = document.cookie.substring(inici,mig); valor= document.cookie.substring(mig+1,final); } //Una vegada recuperat el nom i el valor, s'assigna a l'array //associativa aplicant la funció de conversió unescape() cookies[nom] = unescape(valor); //En el pas següent del bucle while, la variable inici adquireix //el valor final +2, i d'aquesta manera salten el punt i coma i //l'espai que separa les diverses cookies en la cadena inici = final + 2; } }
function eliminaCookie(nombre){ //S'actualitza la cookie modificant la data de caducitat i assignant //un valor qualsevol, en l'exemple esborrada document.cookie = nom + "=esborrada; expires=Thu, 01-Jan-1970 00:00:01 GMT"; //S'actualitza la cookie sense valor indicant una data de caducitat //anterior document.cookie = nom + "; expires=Thu, 01-Jan-1970 00:00:01 GMT"; }
assignaCookie("nom","Victor"); assignaCookie("email","vriospazos@uoc.edu");
extreuCookies(); var nom = cookies["nom"]; var corr = cookies["email"];
eliminaCookie("nom"); eliminaCookie("email");
3.2.3.Usos principals de les galetes
-
S'utilitzen galetes per a emmagatzemar l'estat de l'usuari, adaptant la presentació o el contingut de la pàgina basant-se en les preferències de l'usuari.
-
Redireccionar l'accés a una pàgina diferent quan l'usuari compleix certes condicions; per exemple, un usuari registrat passarà directament a les pàgines de contingut, mentre que si és la primera vegada que l'usuari hi accedeix se l’adreça a la pàgina de registre.
-
Igual que en el cas anterior, a un usuari que accedeix per primera vegada se li pot obrir una finestra d'informació inicial, de manera que aquesta solament s'obri la primera vegada que accedeix a la pàgina.
3.2.4.Limitacions
-
almenys tres-centes galetes
-
mínim de 4.096 bytes per galeta (d'acord amb la grandària dels caràcters que componen la galeta no terminal en la descripció de la sintaxi de l'encapçalament Set-Cookie)
-
almenys vint galetes per nom de host o domini únic
3.3.Web Storage
IE |
Firefox |
Chrome |
Safari |
Opera |
Safari iOS |
Android |
---|---|---|---|---|---|---|
8+ |
3.5+ |
5+ |
4+ |
10.5+ |
2+ |
2+ |
<script> //Podem utilitzar l'objete localStorage o el sessionStorage if(localStorage){ //Existeix localStorage i podem fer emmagatzematge alert("El navegador és compatible amb localStorage "); } else { //No existeix localStorage alert("El navegador no és compatible amb localStorage "); } <script>
3.3.1.Utilitzar Web Storage
-
Inserint el parell clau-valor:
localStorage.setItem('clau','valor');
-
Inserint un nou element com si localStorage fos una taula associativa:
localStorage['clau'] = 'valor';
-
Tractant localStorage com un objecte:
localStorage.clau = 'valor';
-
Utilitzant el mètode getItem():
valor = localStorage.getItem('clau');
-
Tractant d'accedir al valor utilitzant la clau com si localStorage fos una taula associativa:
valor = localStorage['clau'];
-
Tractant localStorage com un objecte i utilitzant la clau com si en fos una propietat:
valor = localStorage.clau';
localStorage.removeItem('clau');
localStorage.clear();
var total = localStorage.length;
<script> for (var i=0; i < localStorage.length; i++) { document.write("La clau "+localStorage.key(i)+" emmagatzem el valor " +localStorage[localStorage.key(i)]); } </script>
Activitats
-
Per a cadascun dels objectes, definiu la classe a la qual pertanyen.
-
Assigneu a cada classe un identificador descriptiu adequat.
-
Enumereu diversos atributs i operacions per a cadascuna de les classes.
-
encripta(text): que substitueix cadascun dels caràcters de la cadena per d'altres, de manera que el text resultant quedarà inintel·ligible.
-
desencripta(text): que realitza la substitució inversa a la de la funció anterior.