Guida JavaScript

Introduzione

Secondo Wikipedia esistono oltre 700 linguaggi di programmazione.

Esistono 2 tipi di linguiaggi di programmazione:

  • compilati
  • interpretati

Linguaggi Compilati
Le istruzioni scritte dal programmatore (altrimenti detto “codice sorgente”) vengono date come input ad un programma, chiamato appunto compilatore, che lo trasforma in codice macchina

Linguaggi Interpretati
Il codice sorgente viene eseguito direttamente da un programma, chiamato interprete, che esegue le operazioni

Compilati Interpretati
ADA PHP
C JavaScript
C++ Ruby
Pascal Basic
Fortran Python

JavaScript è un linguaggio di programmazione interpretato (dal browsewr) ed è uno dei più usati al mondo, è un vero e proprio linguaggio di programmazione (o di scripting che dir si voglia) orientato agli oggetti (seppur in modo "limitato") ed agli eventi.

Storia

JavaScript fu sviluppato originariamente da Brendan Eich della Netscape Communications nel 1995.
E' Stato pensato per un utilizzo solamente client-side come compagno di HTML e CSS ed è stato cosi fino al 2010.

Nel 2010 grazie principalmente a Node.js, JavaScript è stato trasformato in un linguaggio server sid, che quindi può essere utilizzato senza un browser e senza HTML e CSS avendo funzionalità simili ai linguaggi come PHP ecc.

JavaScript nasce per dare dinamicità alle pagine web.
Consente di:

  • Accedere e modificare elementi della pagina HTML
  • Reagire ad eventi generati dall'utente
  • Validare i dati inseriti dall'utente
  • Interagire con il browser:
    • determinare il browser utilizzato
    • la dimensione del viewport
    • lavorare con i cookie

Implementare il Codice JavaScript

Il codice Javascript viene implementato direttamente all'interno delle pagine HTML, frequentemente all'interno della sezione <head>, con l'utilizzo dei tag <script> ... </script>.
E' bene precisare che il codice Javascript può essere inserito in qualsiasi punto del documento HTML, sia nell'<head> che nel <body> della pagina.
Più frequentemente alla fine del tag <body>:
<script src="path/script.js"></script>

E' possibile includere anche gli script esterni. Per farlo si usa sempre il tag <script> specificando, all'interno dell'attributo src, la URL del file Javascript che si desidera includere:
<script src="https://www.sito.com/file-esterno.js"></script>

Hello World in Javascript

Per stampare a schermo una semplice stringa di testo si utlizza document.write('testo').
Il codice che va implementato nel <body> della pagina nel punto esatto in cui si vuole appaia la stringa, ad esempio in un paragrafo oppure nella cella di una tabella.

<script> document.write('hello world'); </script>

Esempio:

Le variabili

In un qualsiasi linguaggio di programmazione un ruolo indispensabile e di primo piano è occupato dal concetto di variabile.
Possiamo definire una variabile come un contenitore nel quale salviamo un informazione, o meglio un etichetta che assegnamo all'informazione.

Le variabili in JavaScript sono definite con la parola var seguite dal nome della variabile:
var miaVariabile

JavaScript è case sensitive, cioè fa distinzione tra lettere maiuscole e minuscole, quindi la variabile miaVariabile è diverso da miavariabile.
Molte keyword sono costituite da parole composte unite senza alcuno spazio o trattino ad esempio: getElementById()

Questo metodo di scrittura è detto camelCase, le lettere maiuscole all’interno della keyword servono per individuare facilmente l’inizio di una parola.

I nomi delle variabili devono rispettare precisi criteri:

  • devono cominciare sempre con una lettera, mai con un numero
  • in generale non devono essere presenti caratteri diversi da lettere o numeri
  • i nomi devono essere diversi dalle keyword riservate di JavaScript

Per assegnare un valore ad una variabile viene utilizzato operatore di assegnazione. Questo operatore va indicato con =
Esempio:

var nomeVariabile = "contenuto";

Lo scope: variabili globali e locali

Lo scope o ambito di visibilità di una variabile è la parte di uno script all’interno del quale si può fare riferimento ad essa.

Le variabili dichiarate all’interno di una funzione sono dette locali alla funzione dal momento che sono accessibili soltanto all’interno del suo corpo.
Le variabili dichiarate fuori da qualsiasi funzione sono dette globali e sono accessibili da qualsiasi punto dello script, anche all’interno di funzioni.

Tipi di dato: il valore delle variabili

“JavaScript is Loosely Typed”

La tipizzazione è una delle caratteristiche che distinguono i linguaggi di programmazione.
Le variabili possono contenere diversi tipi di dati, e strutture di dati. Alcuni esempi: numeri interi (int), numeri con la virgola, stringhe, liste, etc...

In Javascript il programmatore non deve dichiarare “in anticipo” il tipo della variabile che utilizzerà.

JavaScript automaticamente riconoscerà che tipo di dato è!

I tipi di dati nel JavaScript sono 7

  • Number - Numero
  • String - Stringa, sequenza di caratteri
  • Boolean - true|false, 1|0
  • Object - Oggetto
  • Function - Funzione, un Oggetto «speciale»
  • Null - Valore Nullo
  • Undefined - Non Definito

Un altro tipo di dato particolare della variabile è l'array

Operatori

Se è vero che le variabili svolgono un ruolo da primo piano in un qualsiasi programma, è altrettanto vero che lo è altrettanto saper svolgere su di esse determinate operazioni come, ad esempio, operazioni matematiche, confronti, concatenazioni, ecc.

Operatori di assegnazione

Abbiamo già visto che per assegnare un valore ad una variabile utilizzaimao l'operatore di assegnazione =

Ma esistono anche altri operatori di assegnazione, specialmente se si lavora con dei valori o variabili numeriche.

  • += operatore di assegn. incrementale e viene usato cosi: x += y che equivale a x = x + y
  • -= operatore di assegn. decrementale e viene usato cosi: x -= y che equivale a x = x - y
  • *= operatore di assegn. di moltiplicazione e viene usato cosi: x *= y che equivale a x = x * y
  • /= operatore di assegn. divizionale e viene usato cosi: x /= y che equivale a x = x / y
  • %= operatore di assegn. modulare e viene usato cosi: x %= y che equivale a x = x % y

Operatori di concatenzaione

Gli operatori di concatenzaione servono appuno per concatenare 2 variabili stringa.

  • + con questo operatore è possibile concatenare 2 variabili stringa
var text1 = 'hello'; var text2 = 'world'; ducument.write(text1 + text2); Output:
  • += con questo operatore viene concatenato il valore della variabile di sinistra all'espressione di destra.
var text = 'hello'; text += 'world'; document.write(text); Output:

Operatori matematici

Si tratta di comuni operatori per effettuare operazioni matematiche tra variabili numeriche

  • + Esegue un'addizione o concatena se almeno una variabile è stringa
  • - Esegue una sottrazione
  • * Esegue una moltiplicazione
  • / Esegue una divisione
  • % (modulo) calcola il resto intero della divisione tra due numeri

Inoltre ci sono due operatori molto importanti:

  • ++ operatore di incremento
var num = 7; num++; document.write(num); Output:
  • -- operatore di decremento
var num = 7; num--; document.write(num); Output:

Operatori di confronto

Operatori di confronto oppure gli possiamo anche chiamare operatori relazioneli, possono agire su diversi tipi di variabili (stringa, numero, valore booleano ecc) e sono utilizzati per effettuare appunto il confronto.
L'Esito di questo confronto genera un valore booleano (true o false).

  • == Uguaglianza
  • === Uguaglianza stretta (sia di tipo e di valore)
  • != Diversità (Not)
  • < Minore
  • <= Minore o uguale
  • > Maggiore
  • >= Maggiore o uguale

Questo tipo di operatori assume un'importanza centrale all'interno delle strutture di controllo (o strutture condizionali) quando, cioè, l'esito del confronto tra due o più variabili diventa determinante al fine del comportamento del programma stesso.

Operatori logici

Questi operatori consentono di effettuare operazioni logiche di associazione.
Anche questi operatori sono utilizzati nelle strutture di controllo del flusso di programma.

  • && - L'operatore "AND" (operatore binario - prevedono 2 operandi) è utilizzato per creare condizioni complesse composte da una pluralità di sotto-condizioni; Tutte le sotto-condizioni devono restituere true affinche la routine si verifichi
  • || - UL'operatore "OR" (operatore binario - prevedono 2 operandi) è utilizzato per creare condizioni complesse composte da una pluralità di sotto-condizioni; affinché la routine si verifichi è necessario che almeno una delle sotto-condizioni sia vera.
  • ! - L'operatore "NOT" (operatore unario - richiede un operando) indica una negazione all'interno di una routine. In sostanza si usa per invertire il significato di una condizione.

Esempio:

var a = 10; var b = 3; var c = 9; var d = 24; if (a == b && c < d) { ... } // il controllo restituisce FALSE if (a != b && c < d) { ... } // il controllo restituisce TRUE if (a > b || c == d) { ... } // il controllo restituisce TRUE if (!(a > b)) { ... } // il controllo restituisce FALSE

Strutture condizionali

Strutture condizionali dette anche istruzioni condizionali eseguono un certo blocco di codice se si verifica una ben precisa condizione.

if, else if, else

Come in ogni linguaggio di programmazione che si rispetti, anche in Javascript, infatti, è possibile definire delle condizioni al verificarsi delle quali deve o meno accadere qualcosa. Per fare ciò ci si serve degli operatori if, else if, else i quali corrispondono alle locuzioni condzionali "se", "oppure se" e "oppure".

La struttura è la seguente:

  • keyword if - significa "Se"
  • condizioe (...) - restituisce un valore booleano true/false come risultato
  • istruzione {...} - cosa accade se la condizione si verifica
if (condizione 1) {   istruzioni; } else if (condizione 2) {   istruzioni; } else if (condizione 3) {   istruzioni; } else {   istruzioni; } var screenwidth = screen.width; if (screenwidth < 400) {   document.write('Stai usando uno smartphone'); } else if (screenwidth < 800) {   document.write('Stai usando un tablet'); } else {   document.write('Stai usando un computer'); }

Istruzioni condizionali composite (con operatori logici "AND"):

var oraSalutoBtn = document.getElementById('ora-saluto'); oraSalutoBtn.addEventListener('click', function() { // html Output var salutoOraOutput = document.getElementById('ora-saluto-output'); // creo un oggetto data var dataObject = new Date(); // individuo l'ora corrente var ora = dataObject.getHours(); if (ora > 06 && ora <= 12) { salutoOraOutput.innerHTML = 'Buon giorno!'; } else if (ora > 12 && ora <= 18) { salutoOraOutput.innerHTML = 'Buon pomeriggio!'; } else if (ora > 18 && ora <= 22) { salutoOraOutput.innerHTML = 'Buona sera!'; } else { salutoOraOutput.innerHTML = 'Buona notte!'; } });

Avvia lo script

 

Switch case

Con lo switch viene presa in esame una data variabile e vengono definiti una serie di comportamenti (casi) a seconda che quesa abbia un determinato valore.

  • il costrutto si apre con la parola switch seguita da una parentesi tonda al cui interno è specificata la variabile da valutare;
  • vengono definiti una serie di casistiche attraverso la parola case con un possibile valore della variabile presa in esame seguita dai due punti (:);
  • all'interno di ogni blocco case sono inserite delle istruzioni al termine delle quali deve essere inserito il comando break al fine di interrompere il flusso dello switch;
  • l'ultimo blocco è contraddistinto dalla parola default seguita dai due punti (:) che definisce le istruzioni da eseguire qualora nessuno dei casi si sia verificato.

La sintassi di switch è la secuente:

switch(variabile) { case valore1: istruzioni; break; case valore2: istruzioni; break; case valore3: istruzioni; break; default: istruzioni; } Esempio: switch (voto) { case 1: case 2: case 3: case 4: case 5:   giudizio = "insufficiente";   break; case 6:   giudizio = "sufficiente";   break; case 7:   giudizio = "discreto";   break; case 8:   giudizio = "buono";   break; case 9:   giudizio = "ottimo";   break; case 10:   giudizio = "eccellente";   break; default:   messaggio = "non classificato";   break; }

I Cicli

Per una serie di motivi può nascere l'esigenza di dover ripetere una serie di istruzioni un determinato numero di volte, o finchè non si verifichi una data condizione. In tali circostanze è necessario ricorrere alle iterazioni o, più comunemente, ai cicli.
Javascript supporta diverse strutture iterative:

  • il ciclo for()
  • il ciclo while()
  • il ciclo do while()

Il ciclo for()

Un ciclo for() serve a ripetere una serie di istruzioni un determinato numero determinato di volte. Per definire un ciclo for() si imposta:

  • una variabile contatore a cui si assegna un valore di partenza arbitrario (solitamente 0);
  • la condizione di terminazione (cioè un valore della variabile contatore che, una volta raggiunto, blocca il ciclo);
  • ed uno step (cioè l'incremento - o decremento - da applicare alla variabile contatore ad ogni passaggio del ciclo).

Ecco la sintassi:

for(var i=0; i<3; i++) {   /*   istruzioni che verranno ripetute 3 volte   */ }

Con for abbiamo definito il valore di partenza (var i=0), la condizione che termina il ciclo (i<3) ed il nostro step (i++). In pratica for eseguirà le istruzioni contenute tra le parentesi graffe per tre volte in quanto al primo passaggio "i" avrà valore 0, al secondo 1, al terzo 2 ed a questo punto si stopperà in quanto la condizione di terminazione ci dice che il ciclo dovrà continuare sino a quanto "i" è minore di 3.

Il ciclo while()

A differenza di for(), il ciclo while() non prevede l'utilizzo di alcun contatore ma semplicemente l'indicazione di una condizione di terminazione: il ciclo terminerà non appena la condizione impostata si realizza(diventerà true).
La sintassi è la seguente:

while (condizione) {   istruzioni; } Esempio 1 var i = 0; while (i < 10) {   document.write('Conto: ' + i);   i++; // operatore di incremento è importante per evitare i loop } Esempio 2 var eta = parseInt(prompt(quale la tua età?')); while(isNaN(eta) || eta === null) {   eta = parseInt(prompt('errore: quale la tua età?')); }

Il ciclo while si ferma non appena la condizione diventa true. Il ciclo while è pratico per eseguire cicli la cui condizione non dipende per forza da un contatore, ma da unza condizione.
A parte ciò, il ciclo for() e while() sono equivalenti.

Il ciclo do while()

La struttura do while() è una variante di while(). La differenza tra le due sintassi consiste nel fatto che il controllo della condizione avviene dopo l'esecuzione dell'istruzione e non prima; la differenza, da un punto di vista pratico, è che l'istruzione viene eseguita sempre almeno una volta.
Questa la sintassi:

do {   istruzioni; } while (condizione); Esempio do { var eta = parseInt(prompt(quale la tua età?')); } while (isNaN(eta) || eta === null);

Gli array

Gli array consentono di associare più valori ad un unico nome di variabile (o identificatore). In genere i valori contenuti in un array hanno una qualche affinità (ad esempio l’elenco dei giorni della settimana). L’uso degli array evita di definire più variabili e semplifica lo svolgimento di operazioni cicliche su tutti i valori.
Gli elementi di un array possono essere di qualsiasi tipo di dato/valore previsto da JavaScript

I valori/elementi dell’array sono delimitati da parentesi quadre e separati da virgole.
Ecco la sintassi:
var iscritti = ["Luca", "Marco", "Paolo"];

Così, ad esempio, se vogliamo accedere al primo elemento dell’array scriveremo:
var studente = iscritti[0];

Per aggiungere un elemento i un array abbiamo la funzione .push():

var iscritti = ["Luca", "Marco", "Paolo"]; iscritti.push('Alessandro'); Risultato: "Luca", "Marco", "Paolo", "Alessandro"

Ordinamento di un array: sort() e reverse()

Lavorando con gli Array() a volte si ha l'esigenza di manipolare i dati in maniera diversa da quella nativa, ad esempio ordinando i dati secondo un certo ordine/criterio o manipolandoli come una stringa.

Con il metodo sort() possiamo ordinare un Array() in ordine alfabetico:

var iscritti = ["Luca", "Marco", "Paolo", "Alessandro"]; iscritti.sort(); Risultato: ["Alessandro", "Luca", "Marco", "Paolo"];

Con il metodo reverse() possiamo invertire l'ordine di un Array() in senso contrario:

var iscritti = ["Luca", "Marco", "Paolo", "Alessandro"]; iscritti.reverse(); Risultato: ["Alessandro", "Paolo", "Marco", "Luca"]

Convertire un array in stringa

I metodi toString() e join(), la loro funzione è quella di convertire un Array() in una stringa.

Il metodo toString() crea un elenco di elementi separati da una virgola;
var lettere = ['A','B','C','D']; lettere.toString(); Risultato: A,B,C,D
Il metodo join() permette di scegliere il o i caratteri da utilizzare per la separazione
var lettere = ['A','B','C','D']; lettere.join('-'); Risultato: A-B-C-D

Array + Cicli =

Se non sappiamo quanti elementi ci sono in un array ma dobbiamo visualizzarli, possiamo utilizzare il ciclo for() e la proprieta .length .
Dove i avrà il valore 0 e con l'operatore di incremento avrà un valore diverso ad ogni ciclo permettendo di attraversare tutto l'array!

  • .length - è una proprietà degli array che ci dà la sua lunghezza, quindi il numero degli elementi contenuti

Esempio:

var nomi = ["Luca", "Marco", "Paolo", "Alessandro"]; // stampiamo tutti i nomi dell'array for (var i = 0; i < nomi.length; i++) { console.log(nomi[i]); }

Il DOM

Il Document Object Model (o, più brevemente, DOM) è uno standard ufficiale del W3C attraverso il quale la struttura di un documento (esem. pagina HTML) è rappresentata sotto forma di un modello orientato agli oggetti.

In pratica ogni elemento della struttura del documento è rappresentato sotto forma di nodo di un elemento padre creando una sorta di "albero" con dei rami.

● documento   ○ head     ◾ title       ◽ titolo del documento (text node)   ○ body     ◾ h1       ◽ titolo H1 (text node)     ◾ p       ◽ testo testo testo (text node)

Con Javascript è possibile manipolare il DOM della pagina; ogni elemento della pagina viene rappresentato come un oggetto il quale può essere manipolato attraverso metodi e proprietà.

L'oggetto di base per la manipolazione del DOM è document il quale rappresenta la radice del documento nel suo complesso (cioè la pagina web).

Con JavaScript possiamo:

  • Modificare l'HTML
    • Aggiungere/rimuovere classi css
    • Cambiare l’inner html di un elemento
    • Nascondere elementi
  • Reagire a eventi
    • Al click
    • Al hover
    • Al caricamento completo dalla pagina
    • ...
  • Interagire con il browser
    • Impostare i cookie
    • Leggere lo user-agent
    • ...

Lista delle operazini da effettuare sull'element in JS

Ci sono più di 80 operazioni che si posssono fare con JavaScript
Eccone alcuni:

  • element.classList - restituisce i nomi delle classi CSS associate all’elemento
  • element.className - permette di impostare il/le classi CSS che l’elemento ha associate
  • element.innerHTML - permette di modificare l’innerHTML dell’elemento
  • element.style - aggancia un funzione che sarà chiamata quando accade un evento (es. click)
  • element.value - per ottenere il valore di un element, se ne ha uno (utile nei form input)

Selezionare gli elementi della pagina HTML

Per identificare il o gli elementi sui quali agire èutilizziamo uno di questi metodi:

  • getElementByID() - identifica un solo elemento della pagina attraverso l'attributo ID (univoco);
  • getElementByTagName() - identifica un set di elementi della pagina attraverso l'indicazione dello specifico tag (ad esempio tutti i paragrafi o tutti i link);
  • getElementByClassName() - identifica un set di elementi della pagina attraverso l'indicazione di una specifica classe;

Modificare l'HTML del documento

Attraverso la proprietà innerHTML possiamo "scrivere" codice HTML all'interno di un qualsiasi nodo della pagina.

var testoArticolo = document.getElementById('articolo'); testoArticolo.innerHTML = 'Scrivo codice <b>HTML</b>...'; // scrivo all'interno dell'elemento selezionato

Modificare il valore di un attributo

Con JavaScript è possibile cambiare il valore dell'attributo
Ad esempio, di voler cambiare l'immagine sorgente (attributo src) di un tag <img>:

document.getElementById('miafoto').src = 'path/nuovafoto.jpg';

Modificare lo stile CSS di un elemento

L'attributo .style dell'element può diventare a sua volta un oggetto ed essere manipolato attraverso una serie di proprietà corrispondenti alle proprietà dei fogli di stile.

// imposto il colore rosso per il testo element.style.color = '#ff0000'; element..style.font-size = '26px';

Gestire gli eventi utilizzando il DOM

Attraverso l'utilizzo del DOM è anche possibile assegnare un evento ad un dato elemento della pagina. Ad esempio:

// l'evento Javascript si trasforma in una proprietà dell'oggetto element e, come tale, può essere settato a piacimento. var element = document.getElementById('id'); element.onclick = function(){ ... };

Sempre attraverso il DOM è possibile creare degli event listener cioè dei "rilevatori di eventi" associati a specifici elementi della pagina.
Ad esempio:

// assegno una funzione esterna foto.addEventListener('click', miafunzione); // definisco internamente al metodo le istruzioni da eseguire var actionBtn = document.getElementById('action-btn'); actionBtn.addEventListener('click', function() {   alert('hello world'); });

Ci sono altri eventi da ascoltare in JavaScript:
.addEventListener('hover', function() {......});
.addEventListener('focus', function() {......});

Gestire le classi del documento html

Con JavaScript possiamo assegnare una classe con la proprietà .className.
Attenzione però, tutte le classi dell'elementno html vengono sostituiti con la nuova classe!
Ad Esempio:

In HTML prima: <h1 id="main-title"> Guida JS </h1> In JavaScript: var title = getElementByID('main-title'); title.className = "big-text" // nome dalla classe da aggiungere HTML dopo: <h1 id="main-title" class="big-text"> Guida JS </h1>

Se volessimo, invece, aggiungere una classe alla lista delle classi, possiamo utilizzare la proprietà .classList.add()

In HTML prima: <h1 id="main-title" class="main-class"> Guida JS </h1> In JavaScript: var title = getElementByID('main-title'); title.classList.add('second-class', 'third-class'); // nomi dalla classe da aggiungere HTML dopo: <h1 id="main-title" class="main-class second-class third-class"> Guida JS </h1>

Per rimuovere una classe dalla liste delle classi, possiamo utilizzare la proprietà .remove

In HTML prima: <h1 id="main-title" class="main-class second-class third-class"> Guida JS </h1> In JavaScript: var title = getElementByID('main-title'); title.classList.remove('third-class'); // nomi dalla classe da aggiungere HTML dopo: <h1 id="main-title" class="main-class second-class"> Guida JS </h1>

Le Funzioni

Uno degli elementi chiave di un programma, in questo caso di un programma JavaScript, sono le funzioni.

buona norma riutilizzare il codice ogni volta che ve ne sia la possibilità, così da evitare di scrivere codice identico. Le funzioni rendono il codice più pulito e si riducono le possibilità di fare errori.

Le funzioni, quindi, sono dei pezzi di codice che possono essere richiamati più e più volte nel nostro programma principale.

Ecco la sintassi:

function nomeFunzione(argomenti) {   // blocco di istruzioni }

Le funzini possono accettare dei dati in ingresso! come gli (argomenti) che sono una lista opzionale di variabili separati da virgole che verranno utilizzate all’interno del corpo della funzione, cioè il blocco istruzioni.

Ad esempio:

function somma(num1, num2) {   risultato = num1 + num2;   return risultato; // tutto quello che sta dopo il risultato non viene eseguito }

La funzione per eseguire il codice al suo interno deve essere richiamata/evocata

Esempio pratico:

// Chiadiamo due numeri all'utente, la somma di due numeri appendiamo nel campo OUTPUT // Settiamo la funzione al "click" del pulsante in HTML: <button type="button" onclick="functionSomma()"avvia lo script</button> // Il codice che verra eseguito: function functionSomma() {   do {     var num1 = parseInt(prompt('Inserisci il primo numero'));   } while (isNaN(num1));   do {     var num2 = parseInt(prompt('Inserisci il secondo numero'));   } while (isNaN(num2));   var risultatoSomma = num1 + num2;   var esempioFunzioneOutput = document.getElementById('esempio-funzione-output');   esempioFunzioneOutput.innerHTML = 'La somma dei numeri inseriti è: ' + risultatoSomma; }

OUTPUT:

Gli Oggetti in JavaScript

Un Object oggetto letterale: è una struttura di dati che può contenere più valori ai quali si può accedere per mezzo di un indice di nomi.

Ecco come si crea un oggetto:

  • Creiamo una variabile
  • Apriamo le parentesi graffe
  • Inseriamo una serie di coppie nome: valore
var studente = {   'nome': 'Alessandro',   'cognome': 'Orlov',   'occupazione': 'sviluppatore' }

Leggere il valore di un Oggetto

Per recuperare un valore di un object ci sono 2 vie:

  • dot notation - nome_oggetto.nome_proprieta studente.nome
  • parentesi quadre come per gli array - nome_oggetto[nome_proprieta] studente['cognome']

Aggiungere un valore ad un Object

Come per la lettura del valore anche per modificare un valore ad un oggetto sarà sufficiente comportarsi come nel caso della assegnazione di un nuovo valore ad una comune variabile: nome_oggetto.nome_proprieta = nuovo_valore oppure nome_oggetto[nome_proprieta] = nuovo_valore

// Dot notation: studente.nome = 'Alex' // Parentesi quadre studente['occupazione'] = 'sviluppatore web'

Eliminazione di proprietà di un oggetto

L'eliminazione di proprietà avviene mediante lo statement delete secondo questa sintassi: delete nome_oggetto.nome_proprieta

delete studente.cognome

D'ora in avanti, cercando di accedere a questa proprietà, l'interprete Javascript ci restituirà un valore undefined.

Objects - for..in

Se vogliamo stampare tutte le proprietà di un oggetto senza doverne conoscere il numero e il nome utilizziamo il ciclo per gli oggetti for..in

Il ciclo for..in passa attraverso tutte le chiavi dell'oggetto e si scrive in questo modo:

  • keyword for
  • condizione
    Andiamo avanti finché esistono delle chiavi da analizzare all’interno dell’oggetto
    • var key - indica la chiave sulla quale operiamo
    • keyword in - stiamo ciclando all’interno di
    • nome dell’oggetto

Ecco la sintassi:

for(var key in nomeOggetto) {   console.log(nomeOggetto[key]) } // Le parentesi quadre qui sono necessarie per poter usare la variabile key

Stampiamo tutti i valori dell'oggetto studente:

// Oggetto studente var studente = { 'nome':'Alex', 'cognome':'Orlov', 'occupazione': 'sviluppatore web' } // Output per i valori delle chiavi dell'oggetto var outputForIn = document.getElementById('output-for-in'); outputForIn.innerHTML = ''; // Ciclo sull'oggeto for(var key in studente) { outputForIn.innerHTML += studente[key] +'<br>' };

OUTPUT:

API (HTTP, AJAX, JSON)

JavaScript ha la possibilità di fare le chiamate a server e gestire le risposta, cosi la pagina può dialogare con l'esterno.

HTTP

La communicazione avviene con il protocollo HTTP

L'HTTP è un protocollo utilizzato come principale sistema per la trasmisione di informazioni sul web, con architetture client-server.
Il messaggio è composto da 4 parti:

  • Riga di richiesta
  • Header
  • Riga vuota
  • Body (corpo) della richiesta
http request

HTTP - Riga di Richiesta

METODO:
Identifica il tipo di operazione richiesta dal client. I due metodi più utilizzati sono GET e POST (ma esistono anche HEAD, PUT, PATCH, DELETE, OPTIONS, TRACE, CONNECT)

URI:
unified resource identifier è il nome del server che voglio contattare

VERSIONE PROTOCOLLO:
1.1 dal 1997 fino al 2014
2.0 dal 2015

HEADER

Header è uno spazio di lunghezza variabile che può contenere diverse informazioni nel formato chiave: valore

User-Agent: una stringa identificativa del browser utilizzato (chrome) Accept: una lista di file che il client si aspetta per la richiesta che ha fatto Content -Length: la lunghezza della richiesta, in modo che il server possa verificare di averla ricevuta correttamente Authorization: una stringa che il client invia per identificarsi

BODY

Body il corpo della richiesta non è altro che la parte che identifica la risorsa da richiedere.

www.boolean.careers/corso/serale

AJAX

Anche i programmatori web possono fare chiamate HTTP utilizzando Javascript!

AJAX, Asynchronous Javascript And XML, permette di fare chiamate asincrone.

jQuery migliora e facilita la creazione di una chiamata Ajax. vedi metodo qui

JSON & XML

Per comunicare tra loro client e server devono "parlare" la stessa lingua!
Ne esistono 2 standard:

  • XML (eXtensible Markup Language) è una linguaggio di markup (simile all’HTML) che stabilisce un meta linguaggio per passare dati strutturati.
  • JSON (JavaScript Object Notation) utilizza la notazione che conosciamo per definire gli oggetti in JavaScript

Ecco come si presentano:

XML

<?xml version="1.0" encoding="UTF-8"?> <utenti>   <utente anni="20">     <nome>Ema</nome>     <cognome>Princi</cognome>     <indirizzo>Torino</indirizzo>   </utente>   <utente anni="54">     <nome>Max</nome>     <cognome>Rossi</cognome>     <indirizzo>Roma</indirizzo>   </utente> </utenti>

JSON

{   "users": [     {     "nome": "Ema",     "cognome": "Princi",     "indirizzo": "Torino",     "anni": 20     },     {     "nome": "Max",     "cognome": "Rossi",     "indirizzo": "Roma",     "anni": 54     }   ] }

JS + JSON =

Una volta arrivato la risposta dal server in formato JSON, è molto semplice trasformare la risposta (che è semplicemente testo) in un oggetto JavaScript, con JSON.parse().

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');

API: Application Programming Interface

Con API si intende un insieme di procedure rese disponibili ad un programmatore per svolgere un insieme coerente di operazioni.

Query String

Un modo per passare dati al server è attraverso l’URI aggiungendo al termine una querystring.

www.boolean.careers?email=alex@mail.com&title=student

Ecco cosa abbiamo:

  • ? indica che inizia la query string
  • chiave=valore
  • ogni chiave valore è separata da un &

Esercizi:

Esercizio 1:
Chiedi all’utente il suo nome, poi chiedi il suo cognome, poi chiedi l'età, Infine scrivi sulla pagina
nomecognomeeta19

Script eseguito:

var esercizio1 = document.getElementById('btn-esercizio1'); esercizio1.addEventListener('click', function() {   var nome = prompt('quale il tuo nome?');   while(nome === null || nome === '' || !isNaN(nome)) {     nome = prompt('inserisci un nome valido')   }   var cognome = prompt('quale il tuo cognome?');   while(cognome === null || cognome === '' || !isNaN(cognome)) {     cognome = prompt('inserisci un cognome valido')   }   var eta = parseInt(prompt('quale la tua età?'));   while(isNaN(eta)) {     eta = parseInt(prompt('errore: quale la tua età?'));   }   var outputEsercizio1 = document.getElementById('output-esercizio1');   outputEsercizio1.innerHTML = nome + cognome + eta + 20; });

OUTPUT:

Esercizio 2: FizzBuzz
Stampare a schermo i numeri da 1 a 100. Se il numero si divide per 3 al posto del numero stampare Fizz, se si divide per 5 - stampare Buzz, se il numero si divide sia per 3 che per 5 stampare FizzBuzz.

Script eseguito:

for (var i = 1; i <= 100; i++) { // Seleziono dove stampare il risultato   var fizzBuzzOutput = document.getElementById('output-esercizio2'); // Struttura condizionale   if (i % 15 === 0) {     fizzBuzzOutput.innerHTML += 'FizzBuzz' + '<br>'   } else if (i % 5 === 0) {     fizzBuzzOutput.innerHTML += 'Buzz' + '<br>'   } else if (i % 3 === 0) {     fizzBuzzOutput.innerHTML += 'Fizz' + '<br>'   } else {     fizzBuzzOutput.innerHTML += i + '<br>'   } }

OUTPUT:

Esercizio 3: Palindromo
Chiedere all'utente una parola, verificare se la parola è palindroma (viene letta nello stesso modo sia da sinistra a destra che da destra a sinistra.

Script eseguito:

// chiedo la parola all'utente do { var parola = prompt('Inserisci una parola'); } while (parola == null || !(isNaN(parola)) || parola.length <= 2 ); var parolaInvertita = ""; // variabile vuota // ciclo dalla fine della parola inserita. !importante: parola.length - 1; per evitare valore undefined for(var i = parola.length - 1; i >= 0; i--) { parolaInvertita += parola[i]; // Inserisco le lettere della parola digitata dall'utente } // Controllo var risultato = 'non è palindroma'; if (parola === parolaInvertita) { risultato = 'è palindroma'; } // Output var palindromaOutput = document.getElementById('output-esercizio3'); palindromaOutput.innerHTML = 'la parola ' + parola + ' ' + risultato; }

OUTPUT: