Tryb ścisły JavaScript

"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

Spróbuj sam

Przykład

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // To spowoduje błąd, ponieważ y nie została zadeklarowana
}

Spróbuj sam

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
}

Spróbuj sam

"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

Spróbuj sam

Obiekt jest zmienną

Użycie obiektu bez deklaracji obiektu jest niedozwolone:

"use strict";
x = {p1:10, p2:20};      // To spowoduje błąd

Spróbuj sam

Niedozwolone jest usuwanie zmiennej (lub obiektu):

"use strict";
var x = 3.14;
delete x;                // To spowoduje błąd

Spróbuj sam

Niedozwolone jest usuwanie funkcji:

"use strict";
function x(p1, p2) {}; 
delete x;                 // To spowoduje błąd

Spróbuj sam

Niedozwolone są powtarzające się nazwy parametrów:

"use strict";
function x(p1, p1) {};   // To spowoduje błąd

Spróbuj sam

Tekst numeryczny ósemkowy jest niedozwolony:

"use strict";
var x = 010;             // To spowoduje błąd

Spróbuj sam

Niedozwolone są znaki ucieczki:

"use strict";
var x = \010;            // To spowoduje błąd

Spróbuj sam

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

Spróbuj sam

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

Spróbuj sam

Usunięcie nieusuwalnej właściwości jest niedozwolone:

"use strict";
delete Object.prototype; // To spowoduje błąd

Spróbuj sam

Niedozwolone jest używanie ciągu "eval" jako zmiennej:

"use strict";
var eval = 3.14;         // To spowoduje błąd

Spróbuj sam

Niedozwolone jest używanie ciągu "arguments" jako zmiennej:

"use strict";
var arguments = 3.14;    // To spowoduje błąd

Spróbuj sam

with Zakazane są polecenia:

"use strict";
with (Math){x = cos(2)}; // To spowoduje błąd

Spróbuj sam

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

Spróbuj sam

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

Spróbuj sam

Ostrzeżenie

"use strict" Instrukcje mogą być używane tylko w skryptach lub funkcjachPoczątekZostało rozpoznane.