JavaScript-terävä moodi
- Edellinen sivu JS Hoisting
- Seuraava sivu JS this-käsitteet
"use strict";
Määrittelee, että JavaScript-koodin tulisi suoritettavan "tarkassa moodissa".
"use strict"-ohje
"use strict"
On uusi ohje JavaScript 1.8.5:ssä (ECMAScript-versio 5).
Se ei ole lause, vaan tekstilauseke, ja aikaisemmat JavaScript-versiot ohittavat sen.
"use strict";
Toiminnan tarkoitus on ohjata JavaScript-koodin suorittamista "tarkassa moodissa".
Tarkassa moodissa et voi esimerkiksi käyttää määrittelemättömiä muuttujia.
Seuraavien versioiden selaimet tukevat tarkkaa moodia:
- Versiosta 10 eteenpäin IE
- Versiosta 4 eteenpäin Firefox
- Versiosta 13 eteenpäin Chrome
- Versiosta 5.1 eteenpäin Safari
- Versiosta 12 eteenpäin Opera
Tarkkaa moodin käyttö
Lisäämällä "use strict";
Määritä tarkka moodi.
Tarkkaa moodin käyttö skriptin alussa, jossa on globaali soveltamisala (kaikki skriptin koodi suoritetaan tarkassa moodissa):
Esimerkki
"use strict"; x = 3.14; // Tämä aiheuttaa virheen, koska x ei ole vielä määritelty
Esimerkki
"use strict"; myFunction(); function myFunction() { y = 3.14; // Tämä aiheuttaa virheen, koska y ei ole vielä määritelty }
Tarkkaa moodin käyttö funktiossa, jossa on paikallinen soveltamisala (vain funktiossa oleva koodi suoritetaan tarkassa moodissa):
x = 3.14; // Tämä ei aiheuta virheen myFunction(); function myFunction() { "use strict"; y = 3.14; // Tämä aiheuttaa virheen }
"use strict"-syntaksi
Tarkkaa moodin syntaksi on suunniteltu yhteensopivaksi aikaisempien JavaScript-versioiden kanssa.
Käännä JavaScript-ohjelmointikielen arvo-tekstit (esim. 4+5) tai merkkijonot ("Bill Gates") eivät aiheuta kielteisiä vaikutuksia. Ne käännetään vain olemattomiin muuttujiin ja katoavat sitten.
All "use strict";
It will only affect new compilers that "understand" its meaning.
Why use strict mode?
Strict mode makes it easier to write "safe" JavaScript.
Strict mode turns previously acceptable "bad syntax" into real errors.
For example, in ordinary JavaScript, misspelling a variable name will create a new global variable. In strict mode, this will throw an error, making it impossible to accidentally create a global variable.
In ordinary JavaScript, if a variable name is misspelled, it will create a new global variable. In strict mode, this will throw an error, making it impossible to accidentally create a global variable.
Assigning a value to an unwritable, read-only, non-existent property, or assigning a value to a non-existent variable or object will throw an error in strict mode.
Prohibitions in strict mode
Using a variable without declaring it is not allowed:
"use strict"; x = 3.14; // This will cause an error
An object is also a variable
Using an object without declaring it is not allowed:
"use strict"; x = {p1:10, p2:20}; // This will cause an error
Deleting a variable (or object) is not allowed:
"use strict"; var x = 3.14; delete x; // This will cause an error
Deleting a function is not allowed:
"use strict"; function x(p1, p2) {}; delete x; // This will cause an error
Duplicate parameter names are not allowed:
"use strict"; function x(p1, p1) {}; // This will cause an error
Octal numeric literals are not allowed:
"use strict"; var x = 010; // This will cause an error
Escape characters are not allowed:
"use strict"; var x = \010; // This will cause an error
Writing to a read-only property is not allowed:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // This will cause an error
Writing to a property that can only be read is not allowed:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // This will cause an error
Deleting non-deletable properties is not allowed:
"use strict"; delete Object.prototype; // This will cause an error
String "eval" cannot be used as a variable:
"use strict"; var eval = 3.14; // This will cause an error
String "arguments" cannot be used as a variable:
"use strict"; var arguments = 3.14; // Tämä aiheuttaa virheen
with
Lausunto ei ole sallittu:
"use strict"; with (Math){x = cos(2)}; // Tämä aiheuttaa virheen
Turvallisuussyistä ei sallita eval()
Luodaan muuttujat kutsuttavassa kontekstissa:
"use strict"; eval ("var x = 2"); alert (x); // Tämä aiheuttaa virheen
Funktio f() -kutsussa this-arvo on globaali objekti. Tiukassa tilassa se on nyt undefined
.
Tulevaisuuden takaaminen
Ei sallita tulevaisuutta varattuja avainsanoja tiukassa tilassa. Ne ovat:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // Tämä aiheuttaa virheen
Varoitus
"use strict"
Ohjeet voivat olla vainAlkuTunnistettu.
- Edellinen sivu JS Hoisting
- Seuraava sivu JS this-käsitteet