Per molto tempo, JavaScript si è evoluto senza problemi di compatibilità. Nuove caratteristiche venivano aggiunte al linguaggio mentre le vecchie funzionalità non cambiavano.
Questo aveva il vantaggio di non rompere mai il codice esistente. Ma il rovescio della medaglia era che qualsiasi errore o decisione imperfetta presa dai creatori di JavaScript rimaneva bloccata nel linguaggio per sempre.
Questo fu il caso fino al 2009 quando apparve ECMAScript 5 (ES5). Ha aggiunto nuove caratteristiche al linguaggio e modificato alcune di quelle esistenti. Per mantenere il vecchio codice funzionante, la maggior parte di queste modifiche sono disattivate di default. È necessario abilitarle esplicitamente con una direttiva speciale: "use strict"
.
“use strict”
La direttiva appare come una stringa: "use strict"
o 'use strict'
. Quando si trova all’inizio di uno script, l’intero script funziona in modo “moderno”.
Per esempio:
"use strict";// this code works the modern way...
Tra poco impareremo le funzioni (un modo per raggruppare i comandi), quindi notiamo in anticipo che "use strict"
può essere messo all’inizio di una funzione. Facendo così si abilita la modalità strict solo in quella funzione. Ma di solito la gente lo usa per l’intero script.
Assicurarsi che "use strict"
sia in cima ai propri script, altrimenti la modalità strict potrebbe non essere abilitata.
La modalità rigorosa non è abilitata qui:
alert("some code");// "use strict" below is ignored--it must be at the top"use strict";// strict mode is not activated
Solo i commenti possono apparire sopra "use strict"
.
use strict
Non esiste una direttiva come "no use strict"
che riporti il motore al vecchio comportamento.
Una volta entrati in modalità strict, non si torna indietro.
Console del browser
Quando si usa una console per sviluppatori per eseguire del codice, si noti che essa non use strict
per impostazione predefinita.
A volte, quando use strict
fa la differenza, si ottengono risultati errati.
Quindi, come fare effettivamente use strict
nella console?
Prima di tutto, potete provare a premere Shift+Enter per inserire più righe, e mettere use strict
in cima, come questo:
'use strict'; <Shift+Enter for a newline>// ...your code<Enter to run>
Funziona nella maggior parte dei browser, cioè Firefox e Chrome.
Se non funziona, per esempio in un vecchio browser, c’è un modo brutto, ma affidabile, per garantire use strict
. Mettetelo dentro questo tipo di wrapper:
(function() { 'use strict'; // ...your code here...})()
Dovremmo “usare strict”?
La domanda può sembrare ovvia, ma non è così.
Si potrebbe consigliare di iniziare gli script con "use strict"
… Ma sapete cosa c’è di bello?
Il JavaScript moderno supporta “classi” e “moduli” – strutture di linguaggio avanzate (ci arriveremo sicuramente), che abilitano use strict
automaticamente. Quindi non abbiamo bisogno di aggiungere la direttiva "use strict"
, se le usiamo.
Quindi, per ora "use strict";
è un ospite gradito all’inizio dei vostri script. Più tardi, quando il vostro codice sarà tutto in classi e moduli, potrete ometterlo.
Per ora, dobbiamo conoscere il use strict
in generale.
Nei prossimi capitoli, man mano che impareremo le caratteristiche del linguaggio, vedremo le differenze tra la modalità strict e quella old. Fortunatamente, non sono molte e ci rendono la vita migliore.
Tutti gli esempi in questo tutorial assumono la modalità strict a meno che (molto raramente) non sia specificato diversamente.