Articles

JavaScript Use Strict

Posted on

"use strict"; Określa, że kod JavaScript powinien być wykonywany w „trybie ścisłym”.

Dyrektywa „use strict”

Dyrektywa "use strict" była nowością w ECMAScript w wersji 5.

Nie jest to deklaracja, ale dosłowne wyrażenie, 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 współczesne przeglądarki obsługują „use strict” z wyjątkiem Internet Explorera 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 on w pisaniu czystszego kodu, np. zapobiega użyciu niezadeklarowanych zmiennych.

"use strict" to tylko ciąg znaków, więc IE 9 nie wyrzuci błędu, nawet jeśli go nie zrozumie.

Deklarowanie trybu ścisłego

Tryb ścisły deklaruje się przez dodanie „use strict”; na początku skryptu lub funkcji.

Deklarowany na początku skryptu, ma zakres globalny (cały kod w skrypcie będzie wykonywany w trybie ścisłym):

Przykład

„use strict”;
x = 3.14; // Spowoduje to błąd, ponieważ x nie jest zadeklarowane

Spróbuj sam

Przykład

„use strict”;
funkcja myFunction();
funkcja myFunction() {
y = 3.14; // To również spowoduje błąd, ponieważ y nie jest zadeklarowane
}

Spróbuj sam

Deklarowany wewnątrz funkcji, ma zakres lokalny (tylko kod wewnątrz funkcji jest w trybie ścisłym):

x = 3.14; // To nie spowoduje błędu.
myFunction();
function myFunction() {
„use strict”;
y = 3.14; // Spowoduje to błąd
}

Try it Yourself ”

Składnia „use strict”; Składnia

Składnia, do deklarowania trybu ścisłego, została zaprojektowana tak, aby była kompatybilna ze starszymi wersjami JavaScript.

Kompilacja literału numerycznego (4 + 5;) lub literału łańcuchowego („John Doe”;) w programie JavaScript nie ma żadnych efektów ubocznych. Po prostu kompiluje się do nieistniejącej zmiennej i umiera.

Więc "use strict"; ma znaczenie tylko dla nowych kompilatorów, które „rozumieją” jego znaczenie.

Dlaczego Strict Mode?

Tryb ścisły ułatwia pisanie „bezpiecznego” JavaScriptu.

Tryb ścisły zmienia wcześniej akceptowaną „złą składnię” w prawdziwe błędy.

Jako przykład, w normalnym JavaScripcie, błędna nazwa zmiennej tworzy nową zmienną globalną. W trybie ścisłym spowoduje to wyświetlenie błędu, uniemożliwiając przypadkowe utworzenie zmiennej globalnej.

W normalnym JavaScripcie programista nie otrzyma żadnej informacji zwrotnej o błędzie przy przypisywaniu wartości do niezapisywalnych właściwości.

W trybie ścisłym, każde przypisanie do niezapisywalnej właściwości, właściwości typu getter-only, nieistniejącej właściwości, nieistniejącej zmiennej, lub nieistniejącego obiektu, wyrzuci błąd.

Niedopuszczalne w trybie ścisłym

Używanie zmiennej, bez jej zadeklarowania, jest niedozwolone:

„use strict”;
x = 3.14; // Spowoduje to błąd

Spróbuj sam”

Obiekty też są zmiennymi.

Używanie obiektu, bez jego zadeklarowania, jest niedozwolone:

„use strict”;
x = {p1:10, p2:20}; // Spowoduje to błąd

Try it Yourself”

Usuwanie zmiennej (lub obiektu) jest niedozwolone.

„use strict”;
var x = 3.14;
delete x; // Spowoduje to błąd

Try it Yourself”

Usuwanie funkcji jest niedozwolone.

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

Try it Yourself”

Dublowanie nazwy parametru jest niedozwolone:

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

Try it Yourself „

Octal numeric literals are not allowed:

„use strict”;
var x = 010; // Spowoduje to błąd

Próbka własna”

Octalowe znaki ucieczki nie są dozwolone:

„use strict”;
var x = „\010”; // Spowoduje to błąd

Try it Yourself”

Pisanie do właściwości tylko do odczytu jest niedozwolone:

„use strict”;
var obj = {};
Object.defineProperty(obj, „x”, {value:0, writable:false});
obj.x = 3.14; // This will cause an error

Try it Yourself”

Writing to a get-only property is not allowed:

„use strict”;
var obj = {get x() {return 0} };
obj.x = 3.14; // This will cause an error

Try it Yourself”

Deleting an undeletable property is not allowed:

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

Try it Yourself”

Słowo eval nie może być użyte jako zmienna:

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

Try it Yourself”

Słowo arguments nie może być użyte jako zmienna:

„use strict”;
var arguments = 3.14; // Spowoduje to błąd

Spróbuj sam”

Oświadczenie with nie jest dozwolone:

„use strict”;
with (Math){x = cos(2)}; // This will cause an error

Try it Yourself”

Z powodów bezpieczeństwa, eval() nie jest dozwolone tworzenie zmiennych w zakresie, z którego zostało wywołane:

„use strict”;
eval („var x = 2”);
alert (x); // Spowoduje to błąd

Spróbuj sam”

Słowo kluczowe this w funkcjach zachowuje się inaczej w trybie strict.

Słowo kluczowe this 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();

Try it Yourself”

Future Proof!

Słowa kluczowe zarezerwowane dla przyszłych wersji JavaScript NIE mogą być używane jako nazwy zmiennych w trybie ścisłym.

Są to:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
„use strict”;
var public = 1500; // To spowoduje błąd

Try it Yourself”

Watch Out!

Dyrektywa „use strict” jest rozpoznawana tylko na początku skryptu lub funkcji.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *