JavaScript strikt modus
- Föregående sida JS Hoisting
- Nästa sida JS this-nyckelord
"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
Exempel
"use strict"; myFunction(); function myFunction() { y = 3.14; // Detta kommer att orsaka ett fel, eftersom y inte har deklarerats }
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 }
"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
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
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
Det är inte tillåtet att ta bort en funktion:
"use strict"; function x(p1, p2) {}; delete x; // Detta kommer att orsaka ett fel
Upprepade parameternamn är inte tillåtet:
"use strict"; function x(p1, p1) {}; // Detta kommer att orsaka ett fel
Oktalvärdestext är inte tillåtet:
"use strict"; var x = 010; // Detta kommer att orsaka ett fel
Escape-tecken är inte tillåtet:
"use strict"; var x = \010; // Detta kommer att orsaka ett fel
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
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
Det är inte tillåtet att ta bort en ej borttagningsbar egenskap:
"use strict"; delete Object.prototype; // Detta kommer att orsaka ett fel
Strängen "eval" kan inte användas som en variabel:
"use strict"; var eval = 3.14; // Detta kommer att orsaka ett fel
Strängen "arguments" kan inte användas som en variabel:
"use strict"; var arguments = 3.14; // Detta kommer att orsaka ett fel
with
Satsen är inte tillåten:
"use strict"; with (Math){x = cos(2)}; // Detta kommer att orsaka ett fel
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
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
Varning
"use strict"
Instruktioner kan endast användas i skript eller funktionerBörjanidentifieras.
- Föregående sida JS Hoisting
- Nästa sida JS this-nyckelord