JavaScript-terävä moodi

"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

Kokeile itse!

Esimerkki

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // Tämä aiheuttaa virheen, koska y ei ole vielä määritelty
}

Kokeile itse!

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
}

Kokeile itse!

"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

Kokeile itse!

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

Kokeile itse!

Deleting a variable (or object) is not allowed:

"use strict";
var x = 3.14;
delete x;                // This will cause an error

Kokeile itse!

Deleting a function is not allowed:

"use strict";
function x(p1, p2) {}; 
delete x;                 // This will cause an error

Kokeile itse!

Duplicate parameter names are not allowed:

"use strict";
function x(p1, p1) {};   // This will cause an error

Kokeile itse!

Octal numeric literals are not allowed:

"use strict";
var x = 010;             // This will cause an error

Kokeile itse!

Escape characters are not allowed:

"use strict";
var x = \010;            // This will cause an error

Kokeile itse!

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

Kokeile itse!

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

Kokeile itse!

Deleting non-deletable properties is not allowed:

"use strict";
delete Object.prototype; // This will cause an error

Kokeile itse!

String "eval" cannot be used as a variable:

"use strict";
var eval = 3.14;         // This will cause an error

Kokeile itse!

String "arguments" cannot be used as a variable:

"use strict";
var arguments = 3.14;    // Tämä aiheuttaa virheen

Kokeile itse!

with Lausunto ei ole sallittu:

"use strict";
with (Math){x = cos(2)}; // Tämä aiheuttaa virheen

Kokeile itse!

Turvallisuussyistä ei sallita eval() Luodaan muuttujat kutsuttavassa kontekstissa:

"use strict";
eval ("var x = 2");
alert (x);               // Tämä aiheuttaa virheen

Kokeile itse!

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

Kokeile itse!

Varoitus

"use strict" Ohjeet voivat olla vainAlkuTunnistettu.