Přísné použití JavaScriptu
"use strict";
Definuje, že kód JavaScript by měl být spuštěn v „přísném režimu“.
Směrnice "použít přísné použití".
Směrnice "use strict"
byla nová ve verzi ECMAScript 5.
Není to prohlášení, ale doslovný výraz, ignorovaný dřívějšími verzemi JavaScriptu.
Účelem "use strict"
je naznačit, že kód by měl být spuštěn v "přísném režimu".
V přísném režimu nemůžete například používat nedeklarované proměnné.
Všechny moderní prohlížeče podporují „použít přísné“ kromě Internet Exploreru 9 a nižších:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Čísla v tabulce určují první verzi prohlížeče, která plně podporuje direktivu.
Přísný režim můžete použít ve všech svých programech. Pomáhá vám psát čistší kód, například vám brání v používání nedeklarovaných proměnných.
"use strict"
je jen řetězec, takže IE 9 nevyhodí chybu, i když jí nebude rozumět.
Vyhlášení přísného režimu
Přísný režim je deklarován přidáním „použít přísný“; na začátek skriptu nebo funkce.
Deklarováno na začátku skriptu, má globální rozsah (veškerý kód ve skriptu se spustí v přísném režimu):
Příklad
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Příklad
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Deklarovaná uvnitř funkce má místní rozsah (pouze kód uvnitř funkce je v přísném režimu):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
"použít přísné"; Syntax
Syntaxe pro deklaraci přísného režimu byla navržena tak, aby byla kompatibilní se staršími verzemi JavaScriptu.
Kompilace číselného literálu (4 + 5;) nebo řetězcového literálu ("John Doe";) v programu JavaScript nemá žádné vedlejší účinky. Jednoduše se zkompiluje do neexistující proměnné a zemře.
Záleží tedy "use strict";
pouze na nových kompilátorech, kteří "chápou" význam toho.
Proč Strict Mode?
Přísný režim usnadňuje psaní „zabezpečeného“ JavaScriptu.
Přísný režim mění dříve přijatou „špatnou syntaxi“ na skutečné chyby.
Například v normálním JavaScriptu nesprávným zadáním názvu proměnné vznikne nová globální proměnná. V přísném režimu to způsobí chybu, což znemožní náhodné vytvoření globální proměnné.
V normálním JavaScriptu vývojář neobdrží žádnou zpětnou vazbu o chybách přiřazování hodnot vlastnostem, do kterých nelze zapisovat.
V přísném režimu vyvolá jakékoli přiřazení k nezapisovatelné vlastnosti, vlastnosti pouze pro získání, neexistující vlastnosti, neexistující proměnné nebo neexistujícímu objektu chybu.
Není povoleno v přísném režimu
Použití proměnné bez její deklarace není povoleno:
"use strict";
x = 3.14; // This will cause an error
Objekty jsou také proměnné.
Použití objektu bez jeho deklarace není povoleno:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Smazání proměnné (nebo objektu) není povoleno.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Smazání funkce není povoleno.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Duplikování názvu parametru není povoleno:
"use strict";
function x(p1, p1) {}; // This will cause an error
Osmičkové číselné literály nejsou povoleny:
"use strict";
let x = 010; // This
will cause an error
Osmičkové řídicí znaky nejsou povoleny:
"use strict";
let x = "\010"; // This will cause an error
Zápis do vlastnosti pouze pro čtení není povolen:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Zápis do vlastnosti pouze pro získání není povolen:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Smazání neodstranitelné vlastnosti není povoleno:
"use strict";
delete Object.prototype; // This will cause an error
Slovo eval
nelze použít jako proměnnou:
"use strict";
let eval = 3.14; // This will cause an error
Slovo arguments
nelze použít jako proměnnou:
"use strict";
let arguments = 3.14; // This will cause an error
Prohlášení with
není povoleno:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Z bezpečnostních důvodů eval()
není povoleno vytvářet proměnné v rozsahu, ze kterého byly volány:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Klíčové this
slovo ve funkcích se v přísném režimu chová jinak.
Klíčové this
slovo odkazuje na objekt, který volal funkci.
Pokud objekt není zadán, funkce v přísném režimu se vrátí undefined
a funkce v normálním režimu vrátí globální objekt (okno):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Budoucí důkaz!
Klíčová slova vyhrazená pro budoucí verze JavaScriptu NELZE použít jako názvy proměnných v přísném režimu.
Tyto jsou:
- nářadí
- rozhraní
- nechat
- balík
- soukromý
- chráněný
- veřejnost
- statický
- výtěžek
"use strict";
let public = 1500; // This will cause an error
Dávej si pozor!
Direktiva "use strict" je rozpoznána pouze na začátku skriptu nebo funkce.