Articles

JavaScript Use Strict

Posted on

"use strict"; Definisce che il codice JavaScript deve essere eseguito in “strict mode”.

La direttiva “use strict”

La direttiva "use strict" era nuova nella versione 5 di ECMAScript.

Non è una dichiarazione, ma un’espressione letterale, ignorata dalle versioni precedenti di JavaScript.

Lo scopo di "use strict" è quello di indicare che il codice deve essere eseguito in “strict mode”.

Con strict mode, non si possono, per esempio, usare variabili non dichiarate.

Tutti i browser moderni supportano “use strict” tranne Internet Explorer 9 e inferiore:

Direttiva
“use strict” 13.0 10.0 4.0 6.0 12.1

I numeri nella tabella specificano la prima versione del browser che supporta pienamente la direttiva.

È possibile utilizzare la modalità strict in tutti i programmi. Ti aiuta a scrivere un codice più pulito, impedendoti di usare variabili non dichiarate.

"use strict" è solo una stringa, quindi IE 9 non darà un errore anche se non la capisce.

Dichiarare la modalità strict

La modalità strict viene dichiarata aggiungendo “use strict”; all’inizio di uno script o di una funzione.

Dichiarata all’inizio di uno script, ha portata globale (tutto il codice nello script verrà eseguito in modalità strict):

esempio

“use strict”;
x = 3.14; // Questo causerà un errore perché x non è dichiarato

Prova tu stesso ”

Esempio

“use strict”;
myFunction();
funzione myFunction() {
y = 3.14; // Anche questo causerà un errore perché y non è dichiarato
}

Provate voi stessi ”

Dichiarato all’interno di una funzione, ha scope locale (solo il codice all’interno della funzione è in modalità strict):

x = 3.14; // Questo non causerà un errore.
myFunction();
funzione myFunction() {
“use strict”;
y = 3.14; // Questo causerà un errore
}

Prova tu stesso ”

La sintassi “use strict”;

La sintassi, per dichiarare la modalità strict, è stata progettata per essere compatibile con le vecchie versioni di JavaScript.

Compilare un letterale numerico (4 + 5;) o un letterale di stringa (“John Doe”;) in un programma JavaScript non ha effetti collaterali. Semplicemente compila in una variabile non esistente e muore.

Quindi "use strict"; conta solo per i nuovi compilatori che ne “capiscono” il significato.

Perché la modalità rigorosa?

La modalità rigorosa rende più facile scrivere JavaScript “sicuro”.

La modalità rigorosa cambia la “cattiva sintassi” precedentemente accettata in errori reali.

Per esempio, in JavaScript normale, sbagliare il nome di una variabile crea una nuova variabile globale. In modalità rigorosa, questo lancerà un errore, rendendo impossibile creare accidentalmente una variabile globale.

In JavaScript normale, uno sviluppatore non riceverà alcun feedback di errore assegnando valori a proprietà non scrivibili.

In modalità strict, qualsiasi assegnazione ad una proprietà non scrivibile, una proprietà getter-only, una proprietà non esistente, una variabile non esistente, o un oggetto non esistente, darà un errore.

Non è permesso in modalità Strict

Utilizzare una variabile, senza dichiararla, non è permesso:

“use strict”;
x = 3.14; // Questo causerà un errore

Prova tu stesso”

Anche gli oggetti sono variabili.

Utilizzare un oggetto, senza dichiararlo, non è permesso:

“use strict”;
x = {p1:10, p2:20}; // Questo causerà un errore

Prova tu stesso”

Eliminare una variabile (o un oggetto) non è permesso.

“use strict”;
var x = 3.14;
delete x; // Questo causerà un errore

Prova tu stesso “

Eliminare una funzione non è permesso.

“use strict”;
funzione x(p1, p2) {};
cancella x; // Questo causerà un errore

Prova tu stesso “

La duplicazione del nome di un parametro non è permessa:

“use strict”;
funzione x(p1, p1) {}; // Questo causerà un errore

Prova tu stesso “

I letterali numerici ottali non sono ammessi:

“use strict”;
var x = 010; // Questo causerà un errore

Prova tu stesso “

I caratteri di escape ottali non sono ammessi:

“use strict”;
var x = “\010”; // Questo causerà un errore

Prova tu stesso”

La scrittura di una proprietà di sola lettura non è permessa:

“use strict”;
var obj = {};
Object.defineProperty(obj, “x”, {value:0, writable:false});
obj.x = 3.14; // Questo causerà un errore

Prova tu stesso”

Scrivere su una proprietà get-only non è permesso:

“use strict”;
var obj = {get x() {return 0} };
obj.x = 3.14; // Questo causerà un errore

Prova da solo”

L’eliminazione di una proprietà undeletable non è consentita:

“use strict”;
delete Object.prototype; // Questo causerà un errore

Prova tu stesso”

La parola eval non può essere usata come variabile:

“use strict”;
var eval = 3.14; // Questo causerà un errore

Prova tu stesso”

La parola arguments non può essere usata come variabile:

“use strict”;
var arguments = 3.14; // Questo causerà un errore

Prova tu stesso “

L’istruzione with non è consentita:

“use strict”;
with (Math){x = cos(2)}; // Questo causerà un errore

Prova tu stesso”

Per ragioni di sicurezza, eval() non è permesso creare variabili nello scope da cui è stato chiamato:

“use strict”;
eval (“var x = 2”);
alert (x); // Questo causerà un errore

Prova tu stesso”

La parola chiave this nelle funzioni si comporta diversamente in modalità strict.

La parola chiave this si riferisce all’oggetto che ha chiamato la funzione.

Se l’oggetto non è specificato, le funzioni in modalità strict restituiranno undefined e le funzioni in modalità normale restituiranno l’oggetto globale (window):

“use strict”;
funzione myFunction() {
alert(this); // avviserà “undefined”
}
myFunction();

Prova tu stesso”

Prova futura!

Le parole chiave riservate alle future versioni di JavaScript NON possono essere usate come nomi di variabili in modalità strict.

Queste sono:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
“use strict”;
var public = 1500; // Questo causerà un errore

Prova tu stesso”

Attenzione!

La direttiva “use strict” è riconosciuta solo all’inizio di uno script o di una funzione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *