Tryb ścisły JavaScript
- Poprzednia strona Hoisting JS
- Następna strona Kluczowe słowo JS this
"use strict";
Definiuje, że kod JavaScript powinien być wykonywany w "trybie ścisłym".
Instrukcja "use strict"
"use strict"
To nowa instrukcja w JavaScript 1.8.5 (wersja ECMAScript 5).
Nie jest to jednoznaczne z zapisem instrukcji, ale jest to wyrażenie tekstowe, które starsze wersje JavaScript będą pomijać.
"use strict";
Działanie to wskazuje, że kod JavaScript powinien być wykonywany w "trybie ścisłym".
W trybie ścisłym, nie możesz np. używać zmiennych niezadeklarowanych.
Poniższe wersje przeglądarek obsługują tryb ścisły:
- od wersji 10 IE
- od wersji 4 Firefox
- od wersji 13 Chrome
- od wersji 5.1 Safari
- od wersji 12 Opera
deklarowanie trybu ścisłego
Dodając "use strict";
do deklarowania trybu ścisłego.
Deklaracja na początku skryptu, która ma zasięg globalny (wszystkie kod w skrypcie jest wykonywane w trybie ścisłym):
Przykład
"use strict"; x = 3.14; // To spowoduje błąd, ponieważ x nie został zadeklarowany
Przykład
"use strict"; myFunction(); function myFunction() { y = 3.14; // To spowoduje błąd, ponieważ y nie została zadeklarowana }
Deklaracja trybu ścisłego w funkcji, która ma zasięg lokalny (tylko kod w funkcji jest wykonywany w trybie ścisłym):
x = 3.14; // To nie spowoduje błędu myFunction(); function myFunction() { "use strict"; y = 3.14; // To spowoduje błąd }
"use strict"; gramatyka
Gramatyka deklaracji trybu ścisłego została zaprojektowana tak, aby była zgodna z wcześniejszymi wersjami JavaScript.
Kompilacja liczb tekstowych w programach JavaScript (np. 4+5) lub tekstów tekstowych ("Bill Gates") nie ma negatywnego wpływu. Po prostu kompiluje je jako nieistniejące zmienne, które znikają.
Wszystko "use strict";
Ma wpływ tylko na nowe kompilatory, które "rozumieją" jego znaczenie.
Dlaczego używać trybu ścisłego?
Tryb ścisły ułatwia pisanie "bezpiecznego" JavaScript.
Tryb ścisły przekształca wcześniej akceptowane "złe składnie" w rzeczywiste błędy.
Na przykład, w normalnym JavaScript, pomyłkowe napisanie nazwy zmiennej tworzy nową zmienną globalną. W trybie ścisłym, to działanie spowoduje wywołanie błędu, więc niemożliwe jest przypadkowe utworzenie zmiennej globalnej.
W normalnym JavaScript, jeśli przypisz do nieedytowalnej właściwości, deweloper nie otrzyma żadnej informacji zwrotnej o błędzie.
W trybie ścisłym, przypisanie wartości do nieedytowalnej, tylko do odczytu, nieistniejącej właściwości lub przypisanie wartości do nieistniejącej zmiennej lub obiektu spowoduje wywołanie błędu.
Niedozwolone działania w trybie ścisłym
Użycie zmiennej bez deklaracji zmiennej jest niedozwolone:
"use strict"; x = 3.14; // To spowoduje błąd
Obiekt jest zmienną
Użycie obiektu bez deklaracji obiektu jest niedozwolone:
"use strict"; x = {p1:10, p2:20}; // To spowoduje błąd
Niedozwolone jest usuwanie zmiennej (lub obiektu):
"use strict"; var x = 3.14; delete x; // To spowoduje błąd
Niedozwolone jest usuwanie funkcji:
"use strict"; function x(p1, p2) {}; delete x; // To spowoduje błąd
Niedozwolone są powtarzające się nazwy parametrów:
"use strict"; function x(p1, p1) {}; // To spowoduje błąd
Tekst numeryczny ósemkowy jest niedozwolony:
"use strict"; var x = 010; // To spowoduje błąd
Niedozwolone są znaki ucieczki:
"use strict"; var x = \010; // To spowoduje błąd
Zapis do tylko odczytywanego atrybutu jest niedozwolony:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // To spowoduje błąd
Zapis do właściwości, która może być tylko odczytywana, jest niedozwolona:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // To spowoduje błąd
Usunięcie nieusuwalnej właściwości jest niedozwolone:
"use strict"; delete Object.prototype; // To spowoduje błąd
Niedozwolone jest używanie ciągu "eval" jako zmiennej:
"use strict"; var eval = 3.14; // To spowoduje błąd
Niedozwolone jest używanie ciągu "arguments" jako zmiennej:
"use strict"; var arguments = 3.14; // To spowoduje błąd
with
Zakazane są polecenia:
"use strict"; with (Math){x = cos(2)}; // To spowoduje błąd
Z powodu bezpieczeństwa, nie dozwolone jest eval()
Tworzenie zmiennych w kontekście, w którym są wywoływane:
"use strict"; eval ("var x = 2"); alert (x); // To spowoduje błąd
W podobnych do f() wywołania funkcji wartość this jest obiektem globalnym. W trybie rygorystycznym, teraz jest to undefined
.
Gwarancja przyszłości
Nie dozwolone są słowa kluczowe przeznaczone na przyszłość w trybie rygorystycznym. Są to:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // To spowoduje błąd
Ostrzeżenie
"use strict"
Instrukcje mogą być używane tylko w skryptach lub funkcjachPoczątekZostało rozpoznane.
- Poprzednia strona Hoisting JS
- Następna strona Kluczowe słowo JS this