Els tipus de variables en JavaScript són les categories que classifiquen els valors que poden emmagatzemar les variables. JavaScript té cinc tipus primitius i un tipus de referència o objecte. Els tipus primitius són:
undefined
indica aquesta situació.null
, que representa l'absència d'un objecte. Aquest tipus és similar a undefined
, però es pot assignar explícitament a una variable.true
o false
. Aquests valors representen el valor veritat o falsedat d'una expressió o condició.El tipus de referència o objecte correspon a les variables que poden emmagatzemar objectes, és a dir, estructures de dades que agrupen propietats i mètodes. Un exemple d'objecte és un array, que és una col·lecció ordenada de valors accessibles per un índex numèric.
Per saber el tipus d'una variable, es pot utilitzar l'operador typeof
, que retorna una cadena amb el nom del tipus. Per exemple:
typeof 3; // retorna "number"
typeof "hola"; // retorna "string"
typeof true; // retorna "boolean"
typeof null; // retorna "object"
typeof undefined; // retorna "undefined"
typeof [1, 2, 3]; // retorna "object"
En el codi que he proporcionat més avall, es declaren quatre variables amb diferents tipus:
colors
és de tipus objecte i conté un array amb tres cadenes: "vermell"
, "blau"
i "verd"
.nul
és de tipus objecte i té el valor null
.indefinit
és de tipus undefined i no té cap valor assignat.suma
és de tipus funció i conté una funció anònima que retorna la suma de dos paràmetres.El codi també escriu en el document HTML el valor i el tipus de cada variable mitjançant la funció document.write
. Aquesta funció permet inserir contingut dinàmic en una pàgina web. El codi utilitza la funció JSON.stringify
per convertir l'array colors
en una cadena amb format JSON, que facilita la seva visualització.
Els resultats del codi HTML són els següents:
Variable d'array: ["vermell","blau","verd"] (tipus: object) Variable nul·la: null (tipus: object) Variable indefinida: undefined (tipus: undefined) Variable de funció: 8 (tipus: function)Variable numèrica
// Variables numèriques var num = 42; // Declaració d'una variable numèrica document.write("Variable numèrica: " + num + " (tipus: " + typeof num + ")\n");Variable de text
// Variables de text (cadenes de caràcters) var text = "Hola, món!"; // Declaració d'una variable de text document.write("Variable de text: '" + text + "' (tipus: " + typeof text + ")\n");Variable boleana
// Variables boleanes var esCert = true; // Declaració d'una variable boleana document.write("Variable boleana: " + esCert + " (tipus: " + typeof esCert + ")\n");Variable d'objectes
// Variables d'objectes var persona = { // Declaració d'una variable d'objecte nom: "Anna", edat: 25 }; document.write("Variable d'objecte: " + JSON.stringify(persona) + " (tipus: " + typeof persona + ")\n");dVariable d'arrays
// Variables d'arrays var colors = ["vermell", "blau", "verd"]; // Declaració d'una variable d'array document.write("Variable d'array: " + JSON.stringify(colors) + " (tipus: " + typeof colors + ")\n");Variables nul·les
// Variables nul·les var nul = null; // Declaració d'una variable nul·la document.write("Variable nul·la: " + nul + " (tipus: " + typeof nul + ")\n");Variable indefinida
// Variables indefinides var indefinit; // Declaració d'una variable indefinida document.write("Variable indefinida: " + indefinit + " (tipus: " + typeof indefinit + ")\n"); // Variables de funció var suma = function(a, b) { // Declaració d'una variable de funció return a + b; }; document.write("Variable de funció: " + suma(3, 5) + " (tipus: " + typeof suma + ")\n");
//Tipus de funcions //Una funció és semblant a un procediment o conjunt d'instruccions que fa una tasca pero amb la particularitat que hi ha entrada i sortida d'informació // Declaració de funció // Aquesta forma consisteix a definir una funció amb la paraula clau function, seguida d'un nom, una llista de paràmetres entre parèntesis i un bloc de codi entre claus. // Les funcions declarades poden ser cridades abans o després de la seva definició, ja que són hissades (hoisted) al principi de l'abast on es troben. function suma(a, b) { return a + b; } // Expressió de funció // Aquesta forma consisteix a assignar una funció anònima (sense nom) a una variable o una constant. // Les funcions expressades només poden ser cridades després de la seva definició, ja que la variable o la constant que les conté no són hissades. var resta = function(a, b) { return a - b; }; // Funció de fletxa // Aquesta forma consisteix a utilitzar una sintaxi més concisa per crear funcions anònimes amb la paraula clau =>. // Les funcions de fletxa tenen algunes diferències respecte a les altres formes, com per exemple que no tenen el seu propi objecte arguments ni el seu propi valor this. var multiplica = (a, b) => { return a * b; }; // Crida a les funcions i mostra els resultats document.write("Suma: " + suma(3, 5) + "
"); document.write("Resta: " + resta(3, 5) + "
"); document.write("Multiplica: " + multiplica(3, 5) + "
"); // Funció anònima: és una funció que no té nom i que es pot assignar a una variable o passar com a argument a una altra funció. // Exemple: assignem una funció anònima a la variable saluda var saluda = function (nom) { document.write ("Hola, " + nom + "
"); }; // Callback: és una funció que es passa com a argument a una altra funció i que s'executa dins d'aquesta per completar alguna acció o rutina. // Exemple: passem la funció saluda com a callback a la funció repeteix function repeteix (n, callback) { for (var i = 0; i < n; i++) { callback ("Pompeu"); // cridem al callback amb el paràmetre "Pompeu" } } // Autoexecutable: és una funció que s'executa automàticament quan es defineix, sense necessitat de ser cridada després. // Exemple: definim i executem una funció autoexecutable que mostra un missatge (function () { document.write ("Aquesta és una funció autoexecutable
"); }) (); // els parèntesis finals indiquen que s'ha d'executar la funció // Clausura: és una funció que té accés a les variables i paràmetres de la seva funció externa, encara que aquesta hagi acabat. // Exemple: definim una funció externa que retorna una funció interna que fa ús de les variables de l'externa function externa (x) { var y = 2; // variable local de la funció externa function interna () { document.write ("El producte de " + x + " i " + y + " és " + x * y + "
"); } return interna; // retornem la funció interna } // This: és una paraula clau que fa referència a l'objecte actual on es troba el codi que s'està executant. // Exemple: definim un objecte persona amb un mètode que fa ús de this per accedir a les seves propietats var persona = { nom: "Anna", edat: 25, descriu: function () { document.write ("El nom és " + this.nom + " i l'edat és " + this.edat + "
"); } }; // Cridem a les funcions i mostrem els resultats saluda ("Joan"); // cridem a la funció anònima assignada a la variable saluda repeteix (3, saluda); // cridem a la funció repeteix amb el callback saluda var f = externa (5); // cridem a la funció externa i guardem el seu retorn (la funció interna) en la variable f f (); // cridem a la variable f com si fos una funció (és una clausura) persona.descriu (); // cridem al mètode descriu de l'objecte persona, que fa ús de this
<!DOCTYPE html>
<html>
<head>
<title>Condicionals amb Entrada d'Usuari</title>
</head>
<body>
<h1>Condicionals amb Entrada d'Usuari</h1>
<p>Aquest és un exemple de com utilitzar condicionals en JavaScript amb entrada d'usuari:</p>
<script>
// Demanar a l'usuari que introdueixi l'edat
var edat = parseInt(prompt("Introdueix la teva edat:"));
var missatge = "";
// Utilitzant l'if-else per assignar un missatge basat en l'edat
if (edat >= 18) {
missatge = "Ets major d'edat";
} else {
missatge = "Ets menor d'edat";
}
// Mostrar el missatge a la pàgina
document.write("<p>" + missatge + "</p>");
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Operador Ternari amb Entrada d'Usuari</title>
</head>
<body>
<h1>Operador Ternari amb Entrada d'Usuari en Català</h1>
<p>Aquest és un exemple de com utilitzar l'operador ternari en JavaScript amb entrada d'usuari:</p>
<script>
// Demanar a l'usuari que introdueixi l'edat
var edat = parseInt(prompt("Introdueix la teva edat:"));
var missatge = "";
// Utilitzant l'operador ternari per assignar un missatge basat en l'edat
missatge = (edat >= 18) ? "Ets major d'edat" : "Ets menor d'edat";
// Mostrar el missatge a la pàgina
document.write("<p>" + missatge + "</p>");
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Switch </title>
</head>
<body>
<h1>Switch</h1>
<p>Aquest és un exemple de com utilitzar un switch en JavaScript:</p>
<script>
// Demanar a l'usuari que introdueixi l'edat
var edat = parseInt(prompt("Introdueix la teva edat:"));
var missatge = "";
// Utilitzant un switch per assignar un missatge basat en l'edat
switch (true) {
case edat >= 18:
missatge = "Ets major d'edat";
break;
default:
missatge = "Ets menor d'edat";
}
// Mostrar el missatge a la pàgina
document.write("<p>" + missatge + "</p>");
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Funció</title>
</head>
<body>
<h1>Funció</h1>
<p>Aquest és un exemple de com utilitzar una funció en JavaScript:</p>
<script>
// Funció per determinar el missatge basat en l'edat
function determinarMissatge(edat) {
if (edat >= 18) {
return "Ets major d'edat";
} else {
return "Ets menor d'edat";
}
}
// Demanar a l'usuari que introdueixi l'edat
var edat = parseInt(prompt("Introdueix la teva edat:"));
// Cridar la funció i mostrar el missatge a la pàgina
var missatge = determinarMissatge(edat);
document.write("<p>" + missatge + "</p>");
</script>
</body>
</html>
try { // Codi que pot generar un error let result = 10 / 0; // Divisió per zero } catch (error) { console.error(`Error: ${error.message}`); }
try { // Codi que pot generar un error let result = 10 / 0; // Divisió per zero } catch (error) { console.error(`Error: ${error.message}`); } finally { console.log('La clàusula finally sempre s\'executarà.'); }
try { // Codi que pot generar un error let numerator = 10; let denominator = 0; let result = numerator / denominator; // Divisió per zero } catch (error) { console.error(`Error: ${error.message}`); console.error(`Error Stack Trace: ${error.stack}`); console.error(`Error Name: ${error.name}`); console.error(`Error Cause: ${error.cause || 'No cause available'}`); } finally { console.log('La clàusula finally sempre s\'executarà.'); }
try
:
try
és on es pot generar un error. En aquest cas, s'està intentant dividir 10 per 0, la qual cosa provoca una "Divisió per zero". Si es produeix un error dins d'aquest bloc, el control es transferirà immediatament a la clàusula catch
.catch
:
catch
s'executa quan es produeix un error dins del bloc try
. Aquesta clàusula rep un paràmetre error
, que és l'objecte que representa l'error que es va produir. Aquí es mostren diverses propietats de l'objecte error
:
error.message
: Conté el missatge d'error.error.stack
: Conté la pila de trucades (stack trace) que mostra com es va arribar a l'error.error.name
: El tipus d'error (en aquest cas, seria "TypeError" o "ZeroDivisionError").error.cause
: Algunes vegades els errors poden tenir una causa associada; aquí es mostra aquesta causa si està disponible o "No hi ha cap causa disponible" si no n'hi ha cap.finally
:
finally
s'executa sempre, ja sigui que es produeixi un error o no. En aquest cas, simplement mostra un missatge per indicar que la clàusula finally
s'està executant.<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
. Axios és una biblioteca JavaScript que s'utilitza per fer peticions HTTP.<h1>
) per a la prova: "Prova Realista amb Axios, Sinon, Chai i Mocha".<p>
) amb els identificadors "respostaExitosa" i "respostaFallida" per mostrar els resultats exitosos i fallits de les proves.mocha.setup('bdd');
. Aquesta línia estableix la configuració de les proves com a "bdd" (Behavior-Driven Development).fetchData
per realitzar una sol·licitud HTTP amb Axios:
fetchData
que utilitza Axios per fer una sol·licitud HTTP a l'API https://jsonplaceholder.typicode.com/posts/1
. Si la sol·licitud és exitosa, retorna les dades; si hi ha un error, llança l'error.fetchData
i es mostra la resposta exitosa a la pàgina.fetchData
i es captura l'error que es mostra a la pàgina.Aquest codi és un exemple de com realitzar i mostrar proves d'unitats en una pàgina web utilitzant Mocha, Chai, Sinon i Axios, amb la capacitat de simular respostes d'Axios per validar el comportament del codi en respostes exitoses i fallides.