Przez długi czas, JavaScript ewoluował bez problemów z kompatybilnością. Nowe funkcje były dodawane do języka, podczas gdy stara funkcjonalność nie ulegała zmianie.
Miało to tę zaletę, że nigdy nie łamało istniejącego kodu. Ale minusem było to, że każdy błąd lub niedoskonała decyzja podjęta przez twórców JavaScript utknęła w języku na zawsze.
Tak było do 2009 roku, kiedy pojawił się ECMAScript 5 (ES5). Dodała ona nowe funkcje do języka i zmodyfikowała niektóre z istniejących. Aby zachować działanie starego kodu, większość takich modyfikacji jest domyślnie wyłączona. Trzeba je jawnie włączyć za pomocą specjalnej dyrektywy: "use strict"
.
„use strict”
Dyrektywa ta wygląda jak ciąg znaków: "use strict"
lub 'use strict'
. Gdy znajduje się ona w górnej części skryptu, cały skrypt działa w „nowoczesny” sposób.
Na przykład:
"use strict";// this code works the modern way...
Wkrótce będziemy się uczyć funkcji (sposób grupowania poleceń), więc z góry zaznaczmy, że "use strict"
można umieścić na początku funkcji. Włącza to tryb ścisły tylko w tej funkcji. Jednak zazwyczaj ludzie używają go dla całego skryptu.
Upewnij się, że "use strict"
jest na górze twoich skryptów, w przeciwnym razie tryb ścisły może nie zostać włączony.
Tryb ścisły nie jest tutaj włączony:
alert("some code");// "use strict" below is ignored--it must be at the top"use strict";// strict mode is not activated
Tylko komentarze mogą pojawiać się powyżej "use strict"
.
use strict
Nie ma dyrektywy takiej jak "no use strict"
, która przywraca silnik do starego zachowania.
Gdy przejdziemy w tryb ścisły, nie ma odwrotu.
Konsola przeglądarki
Gdy używasz konsoli deweloperskiej do uruchamiania kodu, zwróć uwagę, że domyślnie nie use strict
.
Czasami, gdy use strict
robi różnicę, otrzymasz nieprawidłowe wyniki.
Jak więc faktycznie use strict
w konsoli?
Po pierwsze, możesz spróbować nacisnąć Shift+Enter, aby wprowadzić wiele linii, i umieścić use strict
na górze, jak to:
'use strict'; <Shift+Enter for a newline>// ...your code<Enter to run>
To działa w większości przeglądarek, a mianowicie Firefox i Chrome.
Jeśli tak się nie stanie, np. w starej przeglądarce, istnieje brzydki, ale niezawodny sposób na zapewnienie use strict
. Umieść go wewnątrz tego rodzaju wrappera:
(function() { 'use strict'; // ...your code here...})()
Czy powinniśmy „używać ścisłego”?
Pytanie może brzmieć oczywiste, ale tak nie jest.
Można by polecić rozpoczynanie skryptów od "use strict"
… Ale wiecie co jest fajne?
Nowoczesny JavaScript wspiera „klasy” i „moduły” – zaawansowane struktury językowe (do których jeszcze dojdziemy), które umożliwiają use strict
automatycznie. Tak więc nie musimy dodawać dyrektywy "use strict"
, jeśli z nich korzystamy.
Więc, na razie "use strict";
jest mile widzianym gościem na górze twoich skryptów. Później, gdy Twój kod będzie zawierał się w klasach i modułach, możesz go pominąć.
Jak na razie poznaliśmy use strict
w ogóle.
W kolejnych rozdziałach, w miarę poznawania właściwości języka, będziemy dostrzegać różnice między trybem ścisłym a starym. Na szczęście, nie ma ich zbyt wiele i w zasadzie czynią one nasze życie lepszym.
Wszystkie przykłady w tym poradniku zakładają tryb ścisły, chyba że (bardzo rzadko) określono inaczej.