Articles

JavaScript Use Strict

Posted on

"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.

Je kunt de strikte modus in al je programma’s gebruiken. Het helpt u om schonere code te schrijven, zoals het voorkomen van het gebruik van undeclared variabelen.

"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

“use strict”;
x = 3.14; // Dit zal een fout veroorzaken omdat x niet is gedeclareerd

Probeer het zelf ”

Exemplaar

“use strict”;
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):

x = 3.14; // Dit zal geen fout veroorzaken.
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:

“use strict”;
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:

“use strict”;
x = {p1:10, p2:20}; // Dit geeft een fout

Probeer het zelf “

Een variabele (of object) verwijderen is niet toegestaan.

“use strict”;
var x = 3.14;
delete x; // Dit geeft een fout

Probeer het Zelf “

Het verwijderen van een functie is niet toegestaan.

“use strict”;
functie x(p1, p2) {};
delete x; // Dit zal een fout veroorzaken

Probeer het zelf “

Het dupliceren van een parameternaam is niet toegestaan:

“use strict”;
functie x(p1, p1) {}; //Dit zal een fout veroorzaken

Probeer het Zelf “

Octale numerieke literalen zijn niet toegestaan:

“use strict”;
var x = 010; //Dit geeft een fout

Probeer het zelf “

Octale escape tekens zijn niet toegestaan:

“use strict”;
var x = “\010”; //Dit geeft een fout

Probeer het zelf”

Het schrijven naar een read-only eigenschap is niet toegestaan:

“use strict”;
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:

“use strict”;
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:

“use strict”;
delete Object.prototype; // Dit geeft een fout

Probeer het zelf “

eval

Het woord eval kan niet als variabele worden gebruikt:

“use strict”;
var eval = 3.14; // Dit zal een fout veroorzaken

Probeer het Zelf “

Het woord arguments kan niet als variabele worden gebruikt:

“use strict”;
var arguments = 3.14; // Dit zal een fout veroorzaken

Probeer het zelf”

Het with statement is niet toegestaan:

“use strict”;
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:

“use strict”;
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:

“use strict”;
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
“use strict”;
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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *