JavaScript strengt mode

"use strict"; Definerer, at JavaScript-koden skal udføres i "strengt mode".

"use strict"-instruktion

"use strict" Er en ny instruktion i JavaScript 1.8.5 (ECMAScript version 5).

Det er ikke en sætning, men en tekstudtryksnotation, som tidligere versioner af JavaScript ignorerer.

"use strict"; Formålet med dette er at indikere, at JavaScript-koden skal udføres i "strengt mode".

I strengt mode kan du f.eks. ikke bruge uerklærede variabler.

Følgende versioner af browsere understøtter strengt mode:

  • Version 10 og fremefter af IE
  • Version 4 og fremefter af Firefox
  • Version 13 og fremefter af Chrome
  • Version 5.1 og fremefter af Safari
  • Version 12 og fremefter af Opera

Erklære strengt mode

Ved at tilføje "use strict"; For at erklære strengt mode.

At erklære strengt mode i scriptets begyndelse har et globalt virkningsområde (alle koder i scriptet udføres i strengt mode):

Eksempel

"use strict";
x = 3.14;       // Dette vil udløse en fejl, fordi x endnu ikke er erklæret

Prøv det selv

Eksempel

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // Dette vil udløse en fejl, fordi y endnu ikke er erklæret
}

Prøv det selv

At erklære strengt mode i en funktion har en lokal virkningsområde (kun koden i funktionen udføres i strengt mode):

x = 3.14;       // Dette vil ikke udløse en fejl
myFunction();
function  myFunction() {
	"use strict";
	 y = 3.14;   // Dette vil udløse en fejl
}

Prøv det selv

"use strict"-syntaks

Syntaksen for strengt mode er designet til at være kompatibel med tidligere versioner af JavaScript.

Kompilering af numeriske tekster i JavaScript-programmer (f.eks. 4+5) eller strengtekster ("Bill Gates") har ingen negativ effekt. Det compileres kun til ikke-eksisterende variabler og forsvinder derefter.

Alt "use strict"; Det vil kun påvirke nye kompilatorer, der "forstår" dets betydning.

Hvorfor bruge strengt kast?

Strengt kast gør det lettere at skrive "sikker" JavaScript.

Strengt kast gør tidligere accepterede "dårlige syntaks" til faktiske fejl.

For eksempel vil forkerte variabelnavne i almindelig JavaScript skabe nye globale variabler. I strengt kast vil dette kaste en fejl, så det ikke er muligt at oprette globale variabler ved en fejl.

I almindelig JavaScript vil udviklere ikke modtage nogen fejlfeedback, hvis de tildeler værdier til ikke-skrivbare egenskaber.

I strengt kast vil værdier, der tildeling til ikke-skrivbare, kun-læsbare, ikke-eksisterende egenskaber eller ikke-eksisterende variabler eller objekter, kaste en fejl.

Ulemper ved strengt kast

Det er ikke tilladt at bruge en variabel uden at have erklæret den:

"use strict";
x = 3.14;                // Dette vil forårsage en fejl

Prøv det selv

Objektet er også en variabel

Det er ikke tilladt at bruge et objekt uden at have erklæret det:

"use strict";
x = {p1:10, p2:20};      // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at slette en variabel (eller et objekt):

"use strict";
var x = 3.14;
delete x;                // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at slette en funktion:

"use strict";
function x(p1, p2) {}; 
delete x;                 // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at bruge gentagne parameternavne:

"use strict";
function x(p1, p1) {};   // Dette vil forårsage en fejl

Prøv det selv

Oktal værditekst er ikke tilladt:

"use strict";
var x = 010;             // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at bruge flygtige tegn:

"use strict";
var x = \010;            // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at skrive til en skrivebeskyttet egenskab:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at skrive til en egenskab, der kun kan læses:

"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // Dette vil forårsage en fejl

Prøv det selv

Det er ikke tilladt at slette ikke-slettelige egenskaber:

"use strict";
delete Object.prototype; // Dette vil forårsage en fejl

Prøv det selv

String "eval" kan ikke bruges som en variabel:

"use strict";
var eval = 3.14;         // Dette vil forårsage en fejl

Prøv det selv

String "arguments" kan ikke bruges som en variabel:

"use strict";
var arguments = 3.14;    // Dette vil forårsage en fejl

Prøv det selv

with Sætningerne er ikke tilladt:

"use strict";
with (Math){x = cos(2)}; // Dette vil forårsage en fejl

Prøv det selv

Med hensyn til sikkerhed er det ikke tilladt eval() Opretter en variabel i den kontekst, hvor den bliver kaldt:

"use strict";
eval ("var x = 2");
alert (x);               // Dette vil forårsage en fejl

Prøv det selv

I en funktion kaldet som f(), er værdien af this global objekt. I strict mode er det nu blevet undefined.

Fremtidig sikkerhed

Strict mode tillader ikke brug af fremtidige reserverede nøgleord. Disse er:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // Dette vil forårsage en fejl

Prøv det selv

Advarsel

"use strict" Instruktioner kan kun bruges iBegyndelsenEr blevet genkendt.