"use strict";
Definieert dat JavaScript code in “strict mode” moet worden uitgevoerd.
De richtlijn “use strict”
De richtlijn "use strict"
was nieuw in ECMAScript versie 5.
Het is geen statement, maar een letterlijke expressie, die door eerdere versies van JavaScript werd genegeerd.
Het doel van "use strict"
is om aan te geven dat de code in “strict mode” moet worden uitgevoerd.
Met strict mode kun je bijvoorbeeld geen undeclared variabelen gebruiken.
Alle moderne browsers ondersteunen “use strict”, behalve Internet Explorer 9 en lager:
Directive | |||||
---|---|---|---|---|---|
“use strict” | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
De getallen in de tabel geven de eerste browserversie aan die de richtlijn volledig ondersteunt.
"use strict"
is gewoon een string, dus IE 9 zal geen foutmelding geven, zelfs als het de string niet begrijpt.
Strict mode
Strict mode wordt gedeclareerd door “use strict”; toe te voegen aan het begin van een script of een functie.
Aangegeven aan het begin van een script, heeft het globale scope (alle code in het script zal in strict mode worden uitgevoerd):
Voorbeeld
x = 3.14; // Dit zal een fout veroorzaken omdat x niet is gedeclareerd
Probeer het zelf ”
Exemplaar
mijnFunctie();
functie mijnFunctie() {
y = 3.14; // Dit zal ook een fout veroorzaken omdat y niet gedeclareerd is
}
Probeer het zelf ”
Gedeclareerd binnen een functie, heeft deze lokale scope (alleen de code binnen de functie is in strict mode):
mijnFunctie();
functie mijnFunctie() {
“use strict”;
y = 3.14; // Dit zal een fout veroorzaken
}
Probeer het zelf “
De “use strict”; Syntax
De syntax, voor het declareren van de strikte modus, is ontworpen om compatibel te zijn met oudere versies van JavaScript.
Het compileren van een numeriek letterlijk getal (4 + 5;) of een string letterlijk getal (“John Doe”;) in een JavaScript-programma heeft geen neveneffecten. Het compileert gewoon naar een niet bestaande variabele en sterft af.
Dus "use strict";
is alleen van belang voor nieuwe compilers die de betekenis ervan “begrijpen”.
Waarom Strict Mode?
Strict mode maakt het makkelijker om “veilig” JavaScript te schrijven.
Strict mode verandert eerder geaccepteerde “slechte syntaxis” in echte fouten.
Bij wijze van voorbeeld: in normaal JavaScript wordt door het verkeerd intypen van een variabelenaam een nieuwe globale variabele gemaakt. In de strikte modus geeft dit een foutmelding, waardoor het onmogelijk wordt om per ongeluk een globale variabele aan te maken.
In normale JavaScript krijgt een ontwikkelaar geen foutmelding bij het toewijzen van waarden aan niet-schrijfbare eigenschappen.
In de strikte modus zal elke toewijzing aan een niet-schrijfbare eigenschap, een getter-only eigenschap, een niet-bestaande eigenschap, een niet-bestaande variabele, of een niet-bestaand object, een foutmelding opleveren.
Niet toegestaan in Strict Mode
Het gebruik van een variabele, zonder deze te declareren, is niet toegestaan:
x = 3.14; // Dit zal een fout opleveren
Probeer het zelf”
Objecten zijn ook variabelen.
Een object gebruiken, zonder het te declareren, is niet toegestaan:
x = {p1:10, p2:20}; // Dit geeft een fout
Probeer het zelf “
Een variabele (of object) verwijderen is niet toegestaan.
var x = 3.14;
delete x; // Dit geeft een fout
Probeer het Zelf “
Het verwijderen van een functie is niet toegestaan.
functie x(p1, p2) {};
delete x; // Dit zal een fout veroorzaken
Probeer het zelf “
Het dupliceren van een parameternaam is niet toegestaan:
functie x(p1, p1) {}; //Dit zal een fout veroorzaken
Probeer het Zelf “
Octale numerieke literalen zijn niet toegestaan:
var x = 010; //Dit geeft een fout
Probeer het zelf “
Octale escape tekens zijn niet toegestaan:
var x = “\010”; //Dit geeft een fout
Probeer het zelf”
Het schrijven naar een read-only eigenschap is niet toegestaan:
var obj = {};
Object.defineProperty(obj, “x”, {value:0, writable:false});
obj.x = 3.14; // Dit zal een fout veroorzaken
Probeer het zelf”
Het schrijven naar een get-only property is niet toegestaan:
var obj = {get x() {return 0} };
obj.x = 3.14; // Dit zal een fout veroorzaken
Probeer het zelf”
Het verwijderen van een undeletable property is niet toegestaan:
delete Object.prototype; // Dit geeft een fout
Probeer het zelf “
eval
Het woord eval
kan niet als variabele worden gebruikt:
var eval = 3.14; // Dit zal een fout veroorzaken
Probeer het Zelf “
Het woord arguments
kan niet als variabele worden gebruikt:
var arguments = 3.14; // Dit zal een fout veroorzaken
Probeer het zelf”
Het with
statement is niet toegestaan:
met (Math){x = cos(2)}; //Dit geeft een fout
Probeer het Zelf”
Om veiligheidsredenen is het eval()
niet toegestaan om variabelen aan te maken in de scope van waaruit het is aangeroepen:
eval (“var x = 2”);
alert (x); // Dit zal een fout veroorzaken
Probeer het zelf eens”
Het this
sleutelwoord in functies gedraagt zich anders in strict mode.
Het this
sleutelwoord verwijst naar het object dat de functie heeft aangeroepen.
Als het object niet is gespecificeerd, zullen functies in strikte modus undefined
retourneren en functies in normale modus zullen het globale object (venster) retourneren:
functie mijnFunctie() {
alert(this); // zal “undefined”
}
mijnFunctie() waarschuwen;
Probeer het zelf”
Toekomst Bewijs!
Keywords gereserveerd voor toekomstige JavaScript versies kunnen NIET worden gebruikt als variabele namen in strict mode.
Dit zijn:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
var public = 1500; //Dit zal een fout veroorzaken
Probeer het zelf”
Watch Out!
De “use strict” directive wordt alleen herkend aan het begin van een script of een functie.