Modalità rigorosa di JavaScript

"use strict"; Definisce che il codice JavaScript dovrebbe essere eseguito in "modalità rigorosa".

Direttiva "use strict"

"use strict" È una nuova direttiva in JavaScript 1.8.5 (versione ECMAScript 5).

Non è una frase, ma un'espressione di testo, che le versioni precedenti di JavaScript ignorano.

"use strict"; Il suo significato è indicare che il codice JavaScript dovrebbe essere eseguito in "modalità rigorosa".

In modalità rigorosa, non è possibile, ad esempio, utilizzare variabili non dichiarate.

Ecco le versioni di browser che supportano il modulo di scrittura rigorosa:

  • Versioni successive alla 10 di IE
  • Versioni successive alla 4 di Firefox
  • Versioni successive alla 13 di Chrome
  • Versioni successive alla 5.1 di Safari
  • Versioni successive alla 12 di Opera

Declarare il modulo di scrittura rigorosa

Aggiungendo all'inizio dello script o della funzione: "use strict"; Per dichiarare il modulo di scrittura rigorosa.

Declarare il modulo di scrittura rigorosa all'inizio dello script, con ambito globale (tutto il codice nello script viene eseguito in modalità rigorosa):

Esempio

"use strict";
x = 3.14;       // Questo causerà un errore, perché x non è stato dichiarato

Prova tu stesso

Esempio

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // Questo causerà un errore, perché y non è stato dichiarato
}

Prova tu stesso

Declarare il modulo di scrittura rigorosa all'interno della funzione, con ambito locale (solo il codice nella funzione viene eseguito in modalità rigorosa):

x = 3.14;       // Questo non causerà un errore
myFunction();
function myFunction() {
	"use strict";
	 y = 3.14;   // Questo causerà un errore
}

Prova tu stesso

"use strict"; sintassi

La sintassi del modulo di scrittura rigorosa è progettata per essere compatibile con versioni precedenti di JavaScript.

Compilare testi numerici (ad esempio 4+5) o testi stringa ("Bill Gates") nel codice JavaScript non ha effetti negativi. Semplicemente vengono compilati come variabili inesistenti e scompaiono.

Tutto "use strict"; Impatta solo sui compilatori che "comprendono" il suo significato.

Perché utilizzare la modalità rigorosa?

La modalità rigorosa ci rende più facili a scrivere JavaScript "sicuri".

La modalità rigorosa trasforma i "cattivi linguaggi" accettabili in errori reali.

Per esempio, in JavaScript comune, l'errore di battitura del nome della variabile crea una nuova variabile globale. In modalità rigorosa, ciò lancerà un errore, rendendo impossibile creare variabili globali in modo accidentale。

In JavaScript comune, se si assegna a un attributo non scrivibile, lo sviluppatore non riceverà alcun feedback di errore。

In modalità rigorosa, l'attributo non scrivibile, solo letto, inesistente, o l'attributo assegnato a una variabile o oggetto inesistente, lancerà un errore。

Cosa non è permesso nel modello rigoroso

L'uso di variabili senza dichiarazione non è permesso:

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

Prova tu stesso

Gli oggetti sono variabili

L'uso di oggetti senza dichiarazione non è permesso:

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

Prova tu stesso

L'eliminazione di variabili (o oggetti) non è permessa:

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

Prova tu stesso

L'eliminazione di funzioni non è permessa:

"use strict";
function x(p1, p2) {}; 
delete x;                 // Questo causerà un errore

Prova tu stesso

I nomi di parametri duplicati non sono permessi:

"use strict";
function x(p1, p1) {};   // Questo causerà un errore

Prova tu stesso

I testi numerici ottali non sono permessi:

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

Prova tu stesso

I caratteri di escape non sono permessi:

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

Prova tu stesso

La scrittura di attributi readonly 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

La scrittura di attributi solo letti non è permessa:

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

Prova tu stesso

L'eliminazione di attributi non eliminabili non è permessa:

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

Prova tu stesso

La stringa "eval" non può essere utilizzata come variabile:

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

Prova tu stesso

La stringa "arguments" non può essere utilizzata come variabile:

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

Prova tu stesso

with E' vietato lo statement:

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

Prova tu stesso

Non è permesso per motivi di sicurezza eval() Creare variabili nell'ambito in cui viene chiamata:

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

Prova tu stesso

Nel chiamare una funzione simile a f(), il valore di this è l'oggetto globale. Nel modo rigoroso, ora è diventato undefined.

Garanzia futura

Non è permesso utilizzare parole chiave riservate per il futuro nel modo rigoroso. Sono:

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

Prova tu stesso

Avviso

"use strict" Le istruzioni possono essere utilizzate solo in script o funzioni dellaInizioRiconosciuto.