JavaScript Gebruik Streng
"use strict";
Definieer dat JavaScript-kode in "streng modus" uitgevoer moet word.
Die "gebruik streng" richtlijn
Die "use strict"
opdrag was nuut in ECMAScript weergawe 5.
Dit is nie 'n stelling nie, maar 'n letterlike uitdrukking, geïgnoreer deur vroeëre weergawes van JavaScript.
Die doel van "use strict"
is om aan te dui dat die kode in "streng mode" uitgevoer moet word.
Met 'n streng modus kan jy byvoorbeeld nie onverklaarde veranderlikes gebruik nie.
Alle moderne blaaiers ondersteun "gebruik streng" behalwe Internet Explorer 9 en laer:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Die nommers in die tabel spesifiseer die eerste blaaierweergawe wat die opdrag ten volle ondersteun.
Jy kan streng modus in al jou programme gebruik. Dit help jou om skoner kode te skryf, soos om te verhoed dat jy onverklaarde veranderlikes gebruik.
"use strict"
is net 'n string, so IE 9 sal nie 'n fout gooi nie, selfs al verstaan dit dit nie.
Verklaar streng modus
Streng modus word verklaar deur "gebruik streng" by te voeg; na die begin van 'n skrif of 'n funksie.
Dit word aan die begin van 'n skrif verklaar en het 'n globale omvang (alle kode in die skrif sal in streng modus uitgevoer word):
Voorbeeld
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Voorbeeld
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Dit word binne 'n funksie verklaar en het plaaslike omvang (slegs die kode binne die funksie is in streng modus):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
Die "gebruik streng"; Sintaksis
Die sintaksis, om streng modus te verklaar, is ontwerp om versoenbaar te wees met ouer weergawes van JavaScript.
Die samestelling van 'n numeriese letterlike (4 + 5;) of 'n string letterlike ("John Doe";) in 'n JavaScript-program het geen newe-effekte nie. Dit word eenvoudig saamgestel na 'n nie-bestaande veranderlike en sterf.
Dit maak dus "use strict";
net saak vir nuwe samestellers wat die betekenis daarvan "verstaan".
Waarom streng modus?
Streng modus maak dit makliker om "veilige" JavaScript te skryf.
Streng modus verander voorheen aanvaar "slegte sintaksis" in werklike foute.
As 'n voorbeeld, in normale JavaScript, skep die verkeerde tik van 'n veranderlike naam 'n nuwe globale veranderlike. In streng modus sal dit 'n fout skep, wat dit onmoontlik maak om per ongeluk 'n globale veranderlike te skep.
In normale JavaScript sal 'n ontwikkelaar geen foutterugvoer ontvang wat waardes aan nie-skryfbare eienskappe toeken nie.
In streng modus sal enige toewysing aan 'n nie-skryfbare eienskap, 'n getter-enigste eiendom, 'n nie-bestaande eienskap, 'n nie-bestaande veranderlike of 'n nie-bestaande voorwerp 'n fout skep.
Nie toegelaat in streng modus nie
Die gebruik van 'n veranderlike, sonder om dit te verklaar, word nie toegelaat nie:
"use strict";
x = 3.14; // This will cause an error
Voorwerpe is ook veranderlikes.
Die gebruik van 'n voorwerp, sonder om dit te verklaar, word nie toegelaat nie:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Die verwydering van 'n veranderlike (of voorwerp) word nie toegelaat nie.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Die uitvee van 'n funksie word nie toegelaat nie.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Duplisering van 'n parameternaam word nie toegelaat nie:
"use strict";
function x(p1, p1) {}; // This will cause an error
Oktale numeriese letters word nie toegelaat nie:
"use strict";
let x = 010; // This
will cause an error
Oktale ontsnap-karakters word nie toegelaat nie:
"use strict";
let x = "\010"; // This will cause an error
Skryf na 'n leesalleen eiendom word nie toegelaat nie:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Dit word nie toegelaat om na 'n eiendom wat slegs te kry nie, te skryf:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Die uitvee van 'n onuitveebare eiendom word nie toegelaat nie:
"use strict";
delete Object.prototype; // This will cause an error
Die woord eval
kan nie as 'n veranderlike gebruik word nie:
"use strict";
let eval = 3.14; // This will cause an error
Die woord arguments
kan nie as 'n veranderlike gebruik word nie:
"use strict";
let arguments = 3.14; // This will cause an error
Die with
stelling word nie toegelaat nie:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Om sekuriteitsredes, eval()
word nie toegelaat om veranderlikes te skep in die omvang waaruit dit genoem is nie:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Die this
sleutelwoord in funksies tree anders op in streng modus.
Die this
sleutelwoord verwys na die voorwerp wat die funksie genoem het.
As die voorwerp nie gespesifiseer is nie, sal funksies in streng modus terugkeer undefined
en funksies in normale modus sal die globale voorwerp (venster):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Toekomstige bewys!
Sleutelwoorde wat vir toekomstige JavaScript-weergawes gereserveer is, kan NIE as veranderlike name in streng modus gebruik word nie.
Hierdie is:
- implemente
- koppelvlak
- laat
- pakket
- privaat
- beskerm
- publiek
- staties
- opbrengs
"use strict";
let public = 1500; // This will cause an error
Passop!
Die "gebruik streng" opdrag word slegs aan die begin van 'n skrif of 'n funksie herken.