"use strict"; Określa, że kod JavaScript powinny być wykonywane w trybie "ścisłym".
"use strict" dyrektywę
"use strict" Dyrektywa jest nowy w JavaScript 1.8.5 (ECMAScript version 5) .
Nie jest to stwierdzenie, ale dosłowne wypowiedzi, ignorowana przez wcześniejsze wersje JavaScript.
Celem "use strict" ma oznaczać, że kod powinien być wykonywany w trybie "ścisłym".
W trybie ścisłym, nie można na przykład użyć zmiennych nierejestrowanej.
Tryb ścisły jest obsługiwana w:
IE od wersji 10. Firefox od wersji 4.
Chrome od wersji 13. Safari od wersji 5.1.
Opera od wersji 12.
Deklarowanie trybie ścisłym
Tryb ścisły jest deklarowana przez dodanie "use strict"; na początku skryptu lub funkcji.
Zadeklarowane na początku skryptu, ma zasięg globalny (cały kod w skrypcie będą wykonywane w trybie ścisłym):
Przykład
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
Spróbuj sam " Deklarowane 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 (y is not defined)
}
Spróbuj sam " "use strict"; Składnia
Składnia dla deklarowania tryb ścisły, został zaprojektowany, aby być kompatybilny ze starszymi wersjami JavaScript.
Kompilacja dosłownym numerycznej (4 + 5) lub ciąg dosłowne ("John Doe";) w programie JavaScript nie ma skutków ubocznych. To po prostu kompiluje do nie istniejącej zmiennej i umiera.
Więc "use strict" ; Liczy się tylko do nowych kompilatorów, że "rozumie" znaczenia.
Dlaczego trybie ścisłym?
Tryb ścisły sprawia, że łatwiej napisać "bezpieczne" JavaScript.
Ścisłe zmianę trybu wcześniej zaakceptowane "złą składnię" do rzeczywistych błędów.
Jako przykład, w normalnym JavaScript, pomyłki nazwę zmiennej tworzy nową zmienną globalną. W trybie ścisłym, to wygeneruje błąd, uniemożliwiając przypadkowe utworzyć zmienną globalną.
W normalnym JavaScript, deweloper nie otrzyma informację o błędzie przypisanie wartości do właściwości nie zapisywać.
W trybie ścisłym, każde przypisanie do własności nie do zapisu, właściwość getter tylko, nieistniejąca nieruchomości, nieistniejąca zmiennej lub nieistniejącego obiektu, wygeneruje błąd.
Niedozwolona w trybie ścisłym
Używając zmiennej, bez wypowiedzenia go, nie jest dozwolona:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
Obiekty są zbyt zmienne.
Korzystanie z obiektu, bez wypowiedzenia go, nie jest dozwolona:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
Usunięcie zmiennej (lub obiektu) jest niedozwolone.
"use strict";
var x = 3.14;
delete x; // This
will cause an error
Usuwanie funkcji nie jest dozwolone.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Powielanie nazwę parametru nie jest dozwolona:
"use strict";
function x(p1, p1) {}; // This will cause an error
Ósemkowe literały liczbowe nie są dozwolone:
"use strict";
var x = 010; // This
will cause an error
Ucieczka znaki są niedozwolone:
"use strict";
var x = \010; // This will cause an error
Pisząc do właściwości tylko do odczytu nie jest dozwolona:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Pisząc do nieruchomości Get-tylko nie wolno:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Usuwanie właściwości undeletable nie jest dozwolona:
"use strict";
delete Object.prototype; // This will cause an error
Łańcuch "eval" nie może być stosowany jako zmienną:
"use strict";
var eval = 3.14; // This will cause an error
Ciąg "argumenty" nie może być stosowany jako zmienna:
"use strict";
var arguments = 3.14; // This will cause an error
Instrukcji with nie jest dozwolona:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Ze względów bezpieczeństwa, eval() nie wolno tworzyć zmienne w zakresie od którego został wywołany:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
W takich wywołań funkcji f() , The wartość ta była obiektem globalnym. W trybie ścisłym, to jest teraz niezdefiniowany.
Future Proof!
Przyszłe zastrzeżone są niedozwolone w trybie ścisłym. To są:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
Uważaj!
Uważaj!
"use strict" Dyrektywa ujmuje się tylko na początku skryptu lub funkcji.