Najnowsze tutoriale tworzenie stron internetowych
 

JavaScript Użyj Strict


"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";
x = 3.14;       // This will cause an error (x is not defined)
Spróbuj sam "

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)

Spróbuj sam "

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)

Spróbuj sam "

Usunięcie zmiennej (lub obiektu) jest niedozwolone.

"use strict";
var x = 3.14;
delete x;                // This will cause an error

Spróbuj sam "

Usuwanie funkcji nie jest dozwolone.

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

Spróbuj sam "

Powielanie nazwę parametru nie jest dozwolona:

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

Spróbuj sam "

Ósemkowe literały liczbowe nie są dozwolone:

"use strict";
var x = 010;             // This will cause an error

Spróbuj sam "

Ucieczka znaki są niedozwolone:

"use strict";
var x = \010;            // This will cause an error

Spróbuj sam "

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

Spróbuj sam "

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

Spróbuj sam "

Usuwanie właściwości undeletable nie jest dozwolona:

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

Spróbuj sam "

Łańcuch "eval" nie może być stosowany jako zmienną:

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

Spróbuj sam "

Ciąg "argumenty" nie może być stosowany jako zmienna:

"use strict";
var arguments = 3.14;    // This will cause an error

Spróbuj sam "

Instrukcji with nie jest dozwolona:

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

Spróbuj sam "

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

Spróbuj sam "

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

Spróbuj sam "


Uważaj!

Uważaj!

"use strict" Dyrektywa ujmuje się tylko na początku skryptu lub funkcji.