JavaScript strikt modus

"use strict"; Definierar att JavaScript-koden ska köras i "strikt modus".

"use strict"-instruktionen

"use strict" Det är ett nytt kommando i JavaScript 1.8.5 (ECMAScript version 5).

Det är inte ett kommando, utan en textuttryck, och tidigare versioner av JavaScript ignorerar det.

"use strict"; Syftet är att instruktera att JavaScript-koden ska köras i "strikt modus".

I strikt modus kan du till exempel inte använda odeklarerade variabler.

Följande versioner av webbläsare stöder strikt modus:

  • Version 10 och senare av IE
  • Version 4 och senare av Firefox
  • Version 13 och senare av Chrome
  • Version 5.1 och senare av Safari
  • Version 12 och senare av Opera

Deklarera strikt modus

Genom att lägga till "use strict"; För att deklarera strikt modus.

Deklarera strikt modus i början av skriptet, med global effekt (alla koder i skriptet körs i strikt modus):

Exempel

"use strict";
x = 3.14;       // Detta kommer att orsaka ett fel, eftersom x inte har deklarerats

Prova själv

Exempel

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // Detta kommer att orsaka ett fel, eftersom y inte har deklarerats
}

Prova själv

Att deklarera strikt modus i en funktion har lokal effekt (endast koden inom funktionen körs i strikt modus):

x = 3.14;       // Detta kommer inte att orsaka ett fel
myFunction();
function  myFunction() {
	"use strict";
	 y = 3.14;   // Detta kommer att orsaka ett fel
}

Prova själv

"use strict"-syntaksen

Syntaksen för att deklarera strikt modus är utformad för att vara kompatibel med tidigare versioner av JavaScript.

Att kompilera numeriska texter (t.ex. 4+5) eller strängtexter ("Bill Gates") i JavaScript-program har ingen negativ effekt. Det kompileras bara till oexisterande variabler som sedan försvinner.

Allt "use strict"; Påverkar bara nya kompilatorer som "förstår" dess innebörd.

Varför använda strikt läge?

Strikt läge gör det enklare att skriva "säker" JavaScript.

Strikt läge gör tidigare accepterade "dåliga grammatiska konventioner" till verkliga fel.

Som exempel, i vanligt JavaScript skapas en ny global variabel om du skriver fel på variabelnamnet. I strikt läge kommer detta att kasta ett fel, så att det inte är möjligt att oavsiktligt skapa globala variabler.

I vanligt JavaScript får utvecklaren ingen felrapport om tilldelning till en ej skrivbar egenskap.

I strikt läge kommer att tilldelning till o skrivbara, endast läsbare, icke-existerande egenskaper eller o existerande variabler eller objekt att kasta ett fel.

Vad som inte är tillåtet i strikt läge

Det är inte tillåtet att använda en variabel utan att förklara den:

"use strict";
x = 3.14;                // Detta kommer att orsaka ett fel

Prova själv

Ett objekt är också en variabel

Det är inte tillåtet att använda ett objekt utan att förklara det:

"use strict";
x = {p1:10, p2:20};      // Detta kommer att orsaka ett fel

Prova själv

Det är inte tillåtet att ta bort en variabel (eller ett objekt):

"use strict";
var x = 3.14;
delete x;                // Detta kommer att orsaka ett fel

Prova själv

Det är inte tillåtet att ta bort en funktion:

"use strict";
function x(p1, p2) {}; 
delete x;                 // Detta kommer att orsaka ett fel

Prova själv

Upprepade parameternamn är inte tillåtet:

"use strict";
function x(p1, p1) {};   // Detta kommer att orsaka ett fel

Prova själv

Oktalvärdestext är inte tillåtet:

"use strict";
var x = 010;             // Detta kommer att orsaka ett fel

Prova själv

Escape-tecken är inte tillåtet:

"use strict";
var x = \010;            // Detta kommer att orsaka ett fel

Prova själv

Det är inte tillåtet att skriva till en endast läsbar egenskap:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // Detta kommer att orsaka ett fel

Prova själv

Det är inte tillåtet att skriva till en endast läsbare egenskap:

"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // Detta kommer att orsaka ett fel

Prova själv

Det är inte tillåtet att ta bort en ej borttagningsbar egenskap:

"use strict";
delete Object.prototype; // Detta kommer att orsaka ett fel

Prova själv

Strängen "eval" kan inte användas som en variabel:

"use strict";
var eval = 3.14;         // Detta kommer att orsaka ett fel

Prova själv

Strängen "arguments" kan inte användas som en variabel:

"use strict";
var arguments = 3.14;    // Detta kommer att orsaka ett fel

Prova själv

with Satsen är inte tillåten:

"use strict";
with (Math){x = cos(2)}; // Detta kommer att orsaka ett fel

Prova själv

För säkerhets skull tillåts inte eval() Skapa variabler i den kontext där de anropas:

"use strict";
eval ("var x = 2");
alert (x);               // Detta kommer att orsaka ett fel

Prova själv

I en funktionssamtal som f() är this-värdet globalt. I strikt-läge har det nu blivit undefined.

Framtida säkerhet

Det är inte tillåtet att använda framtida reserverade nyckelord i strikt-läge. Dessa är:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // Detta kommer att orsaka ett fel

Prova själv

Varning

"use strict" Instruktioner kan endast användas i skript eller funktionerBörjanidentifieras.