JavaScript strengt mode
- Forrige side JS Hoisting
- Næste side JS this nøgleord
"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
Eksempel
"use strict"; myFunction(); function myFunction() { y = 3.14; // Dette vil udløse en fejl, fordi y endnu ikke er erklæret }
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 }
"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
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
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
Det er ikke tilladt at slette en funktion:
"use strict"; function x(p1, p2) {}; delete x; // Dette vil forårsage en fejl
Det er ikke tilladt at bruge gentagne parameternavne:
"use strict"; function x(p1, p1) {}; // Dette vil forårsage en fejl
Oktal værditekst er ikke tilladt:
"use strict"; var x = 010; // Dette vil forårsage en fejl
Det er ikke tilladt at bruge flygtige tegn:
"use strict"; var x = \010; // Dette vil forårsage en fejl
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
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
Det er ikke tilladt at slette ikke-slettelige egenskaber:
"use strict"; delete Object.prototype; // Dette vil forårsage en fejl
String "eval" kan ikke bruges som en variabel:
"use strict"; var eval = 3.14; // Dette vil forårsage en fejl
String "arguments" kan ikke bruges som en variabel:
"use strict"; var arguments = 3.14; // Dette vil forårsage en fejl
with
Sætningerne er ikke tilladt:
"use strict"; with (Math){x = cos(2)}; // Dette vil forårsage en fejl
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
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
Advarsel
"use strict"
Instruktioner kan kun bruges iBegyndelsenEr blevet genkendt.
- Forrige side JS Hoisting
- Næste side JS this nøgleord