Ścisłe użycie JavaScript
"use strict";
Określa, że kod JavaScript powinien być wykonywany w „trybie ścisłym”.
Dyrektywa „ścisłe stosowanie”
Dyrektywa "use strict"
była nowa w ECMAScript w wersji 5.
Nie jest to instrukcja, ale wyrażenie dosłowne, ignorowane przez wcześniejsze wersje JavaScript.
Celem "use strict"
jest wskazanie, że kod powinien być wykonywany w „trybie ścisłym”.
W trybie ścisłym nie można na przykład używać niezadeklarowanych zmiennych.
Wszystkie nowoczesne przeglądarki obsługują "użyj ścisłe" z wyjątkiem Internet Explorer 9 i niższych:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Liczby w tabeli określają pierwszą wersję przeglądarki, która w pełni obsługuje dyrektywę.
Możesz używać trybu ścisłego we wszystkich swoich programach. Pomaga pisać czystszy kod, na przykład uniemożliwiając używanie niezadeklarowanych zmiennych.
"use strict"
jest tylko ciągiem, więc IE 9 nie zgłosi błędu, nawet jeśli go nie zrozumie.
Deklarowanie trybu ścisłego
Tryb ścisły jest deklarowany przez dodanie „use strict”; na początek skryptu lub funkcji.
Zadeklarowany na początku skryptu, ma zasięg globalny (cały kod w skrypcie zostanie wykonany w trybie ścisłym):
Przykład
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Przykład
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Zadeklarowany wewnątrz funkcji, ma zasięg lokalny (tylko kod wewnątrz funkcji jest w trybie ścisłym):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
„Użyj ścisłe”; Składnia
Składnia do deklarowania trybu ścisłego została zaprojektowana tak, aby była zgodna ze starszymi wersjami JavaScript.
Kompilacja literału numerycznego (4 + 5;) lub literału łańcuchowego ("John Doe";) w programie JavaScript nie ma skutków ubocznych. Po prostu kompiluje się do nieistniejącej zmiennej i umiera.
Tak więc "use strict";
ma znaczenie tylko dla nowych kompilatorów, którzy „rozumieją” jego znaczenie.
Dlaczego tryb ścisły?
Tryb ścisły ułatwia pisanie „bezpiecznego” JavaScriptu.
Tryb ścisły zmienia wcześniej zaakceptowaną „złą składnię” w rzeczywiste błędy.
Na przykład w normalnym JavaScript, błędne wpisanie nazwy zmiennej tworzy nową zmienną globalną. W trybie ścisłym spowoduje to zgłoszenie błędu, uniemożliwiając przypadkowe utworzenie zmiennej globalnej.
W normalnym JavaScript programista nie otrzyma żadnych informacji zwrotnych o błędach przypisywania wartości do właściwości, których nie można zapisać.
W trybie ścisłym każde przypisanie do właściwości niezapisywalnej, właściwości pobierającej tylko, nieistniejącej właściwości, nieistniejącej zmiennej lub nieistniejącego obiektu spowoduje zgłoszenie błędu.
Niedozwolone w trybie ścisłym
Używanie zmiennej bez jej deklaracji jest niedozwolone:
"use strict";
x = 3.14; // This will cause an error
Obiekty też są zmiennymi.
Posługiwanie się przedmiotem bez zadeklarowania tego jest zabronione:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Usunięcie zmiennej (lub obiektu) jest niedozwolone.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Usunięcie funkcji jest niedozwolone.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Powielanie nazwy parametru jest niedozwolone:
"use strict";
function x(p1, p1) {}; // This will cause an error
Literały ósemkowe nie są dozwolone:
"use strict";
let x = 010; // This
will cause an error
Znaki ucieczki ósemkowej są niedozwolone:
"use strict";
let x = "\010"; // This will cause an error
Zapisywanie we właściwości tylko do odczytu jest niedozwolone:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Zapisywanie we właściwości typu „tylko do pobrania” jest niedozwolone:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Usunięcie właściwości, której nie można usunąć, jest niedozwolone:
"use strict";
delete Object.prototype; // This will cause an error
Słowo eval
nie może być użyte jako zmienna:
"use strict";
let eval = 3.14; // This will cause an error
Słowo arguments
nie może być użyte jako zmienna:
"use strict";
let arguments = 3.14; // This will cause an error
Oświadczenie with
jest niedozwolone:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Ze względów bezpieczeństwa eval()
nie wolno tworzyć zmiennych w zakresie, z którego zostało wywołane:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Słowo this
kluczowe w funkcjach zachowuje się inaczej w trybie ścisłym.
Słowo this
kluczowe odnosi się do obiektu, który wywołał funkcję.
Jeśli obiekt nie jest określony, funkcje w trybie ścisłym zwrócą, undefined
a funkcje w trybie normalnym zwrócą obiekt globalny (okno):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Dowód na przyszłość!
Słowa kluczowe zarezerwowane dla przyszłych wersji JavaScript NIE mogą być używane jako nazwy zmiennych w trybie ścisłym.
To są:
- przybory
- berło
- pozwalać
- pakiet
- prywatny
- chroniony
- publiczny
- statyczny
- dawać
"use strict";
let public = 1500; // This will cause an error
Uważaj!
Dyrektywa „use strict” jest rozpoznawana tylko na początku skryptu lub funkcji.