JavaScript è un linguaggio di scripting client-side e perciò viene interpretato dal browser sul computer dell'utente che visita la pagina.
Nonostante la somiglianza di nomi non c'entra nulla con il Java. Quest'ultimo era un linguaggio molto popolare all'epoca della nascita di JavaScript, si dice che sia stato scelto questo nome per sfruttare appunto la popolarità del Java, in seguito il nome ufficile fu cambiato in ECMAScript seguito dall'anno di revisione. Il suo creatore è Brendan Eich che all'epoca lavorava per Netscape.
JavaScript inizialmente era un linguaggio object-based: esistevano una serie di oggetti predefiniti ma il programmatore non poteva definire le proprie classi come avviene nei linguaggi object-oriented. Questa definizione non è più valida da quando sono state introdotte le classi.
Storia
| VERSIONE | ANNO | DESCRIZIONE |
|---|---|---|
| LiveScript | 1995 | La prima versione di JavaScript |
| ECMAScript | 1997 | Viene stabilito lo standard ECMAScript |
| ES3 | 1999 | Esce la versione ES3 |
| ES5 | 2009 | Esce la versione ES5 e lo standard JSON |
| ES6/ECMAScript2015 | 2015 | Esce la versione ES6 |
| ES12/ECMAScript2021 | 2021 | Esce la versione ES12, l'ultima |
I problemi di compatibilità tra una versione e l'altra vengono risolti attraverso un polyfill (detto anche shim): ad esempio se un codice utilizza una funzione introdotta in ES6 ma viene eseguito in un ambiente che non supporta quella versione il polyfill aggiunge la funzione mancante.
Un'altra possibilità è usare un transpiler (il più famoso è Babel)che traduce il codice da una versione di JavaScript ad un'altra.
Unobtrusive JavaScript
Quando inseriamo del codice JavaScript nella pagina dobbiamo tener presente che l'utente che la visita potrebbe aver disabilitato l'esecuzione degli script nel suo browser, oppure potrebbe utilizzare un device che non ha il mouse ma solo la tastiera (alcuni utenti disabili potrebbero non poterlo usare). Scrivere codice JavaScript in modo unobtrusive (che non disturba) significa fare in modo che anche questo tipo di utente possa usufruire correttamente della pagina.
Ecco i principi da seguire:
- Non dare per scontato che tutti i browser supportino JavaScript, la pagina deve essere fruibile anche senza gli scripts, anche se lo sarà in modo diverso.
- Non dare per scontato che tutti i browser si comportino allo stesso modo
- Non dare per scontato che gli altri programmatori che lavorano al progetto capiscano il codice da noi scritto, quindi bisogna ricordarsi di inserire dei commenti esplicativi dove serve.
- Separare il più possibile il codice che fornisce la struttura della pagina (l'HTML) da quello che fornisce il suo comportamento (il JavaScript). Per fare ciò bisogna scrivere il codice JavaScript in files esterni e poi richiamarli nell'head della pagina con un tag <script> ed evitare di usare gli event handlers in line (come ad esempio gli attributi onmouseover ecc....). Piuttosto è meglio dare un id al tag e poi chiamare l'event handler su quell'id.
- Abbinare l'event handler mouseover con il focus, in questo modo la pagina funzionerà correttamente anche per chi non usa il mouse ma la tastiera e si sposta tra gli elementi con tasto tab.
Terminologia:
Expression e Statement
expression: un pezzo di codice che produce un valore (per esempio 3 + 2) ma non altera lo stato del codice
statement: un pezzo di codice che non produce un valore ma altera lo stato del codice (ad esempio var a = 3 + 2;)
Le expressions sono valutate per produrre un valore, gli statements sono eseguiti per far accadere qualcosa, per esempio in un if:
if (expression) { //l'expression viene valutata
statement; //lo statement fa qualcosa
}
Hoisitng
Temporal Dead Zone (TDZ)
Global Scope e Lexical Scope
Coercion
Closures
Prototype
Parola chiave this
Currying
Memoization