Samouczek JS

JS DOM Wprowadzenie do JS JS Dokąd Wyjście JS Oświadczenia JS Składnia JS Komentarze JS Zmienne JS JS Let JS Const Operatorzy JS Arytmetyka JS Zadanie JS Typy danych JS Funkcje JS Obiekty JS Wydarzenia JS JS Strings Metody ciągów JS Wyszukiwanie ciągów JS Szablony JS String Numery JS Metody liczbowe JS Tablice JS Metody tablic JS Sortowanie tablic JS Iteracja tablicy JS JS Array Const JS Daty Formaty daty JS JS Data Pobierz metody Metody ustawiania daty JS Matematyka JS JS losowo JS Booleans Porównania JS Warunki JS Przełącznik JS Pętla JS dla Pętla JS dla In Pętla JS dla Of Pętla JS, podczas gdy Przerwa JS Iterable JS Zestawy JS Mapy JS Typ JS Konwersja typu JS JS Bitwise JS RegExp Błędy JS Zakres JS JS Podnoszenie Tryb ścisły JS JS to słowo kluczowe Funkcja strzałki JS Klasy JS JS JSON Debugowanie JS Przewodnik po stylu JS Najlepsze praktyki JS Błędy JS Wydajność JS JS słowa zastrzeżone

Wersje JS

Wersje JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Krawędź Historia JS

Obiekty JS

Definicje obiektów Właściwości obiektu Metody obiektowe Wyświetlanie obiektów Akcesoria do obiektów Konstruktorzy obiektów Prototypy obiektów Iterowalne obiekty Zestawy obiektów Mapy obiektów Odniesienie do obiektu

Funkcje JS

Definicje funkcji Parametry funkcji Wywołanie funkcji Wywołanie funkcji Funkcja Zastosuj Zamknięcia funkcji

Klasy JS

Wprowadzenie do zajęć Dziedziczenie klas Klasa statyczna

JS Async

Oddzwaniania JS Asynchroniczny JS JS Obietnice JS Async/Oczekiwanie

JS HTML DOM

Wprowadzenie do DOM Metody DOM Dokument DOM Elementy DOM DOM HTML Formularze DOM DOM CSS Animacje DOM Wydarzenia DOM Odbiornik zdarzeń DOM Nawigacja DOM Węzły DOM Kolekcje DOM Listy węzłów DOM

Zestawienie komponentów przeglądarki JS

Okno JS Ekran JS Lokalizacja JS Historia JS JS Navigator Wyskakujący alert JS Czas JS Pliki cookie JS

JS Web API

Wprowadzenie do internetowego interfejsu API Interfejs API formularzy internetowych Interfejs API historii online API przechowywania danych w sieci Web Web Worker API Internetowy interfejs API pobierania Internetowy interfejs API geolokalizacji

JS AJAX

Wprowadzenie do AJAX AJAX XMLHttp Żądanie AJAX Odpowiedź AJAX Plik XML AJAX AJAX PHP ASP AJAX Baza danych AJAX Aplikacje AJAX Przykłady AJAX

JS JSON

Wprowadzenie do JSON Składnia JSON JSON a XML Typy danych JSON Analiza JSON JSON Obiekty JSON Tablice JSON Serwer JSON JSON PHP JSON HTML JSON JSONP

JS kontra jQuery

Selektory jQuery jQuery HTML jQuery CSS jQuery DOM

Grafika JS

Grafika JS JS płótno JS Działka JS Chart.js Wykres JS Google JS D3.js

Przykłady JS

Przykłady JS JS HTML DOM Wejście JS HTML Obiekty HTML JS Wydarzenia JS HTML Przeglądarka JS Edytor JS Ćwiczenia JS JS Quiz Certyfikat JS

Referencje JS

Obiekty JavaScript Obiekty HTML DOM


Ścisłe użycie JavaScript


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


Dyrektywa „ścisłe stosowanie”

Dyrektywa "use strict"była nowa w ECMAScript w wersji 5.

Nie jest to instrukcja, ale wyrażenie dosłowne, 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 nowoczesne przeglądarki obsługują "użyj ścisłe" z wyjątkiem Internet Explorer 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 pisać czystszy kod, na przykład uniemożliwiając używanie niezadeklarowanych zmiennych.

"use strict" jest tylko ciągiem, więc IE 9 nie zgłosi błędu, nawet jeśli go nie zrozumie.


Deklarowanie trybu ścisłego

Tryb ścisły jest deklarowany przez dodanie „use strict”; na początek skryptu lub funkcji.

Zadeklarowany na początku skryptu, ma zasięg globalny (cały kod w skrypcie zostanie wykonany w trybie ścisłym):

Przykład

"use strict";
x = 3.14;       // This will cause an error because x is not declared

Przykład

"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will also cause an error because y is not declared
}

Zadeklarowany 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
}


„Użyj ścisłe”; Składnia

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

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

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


Dlaczego tryb ścisły?

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

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

Na przykład w normalnym JavaScript, błędne wpisanie nazwy zmiennej tworzy nową zmienną globalną. W trybie ścisłym spowoduje to zgłoszenie błędu, uniemożliwiając przypadkowe utworzenie zmiennej globalnej.

W normalnym JavaScript programista nie otrzyma żadnych informacji zwrotnych o błędach przypisywania wartości do właściwości, których nie można zapisać.

W trybie ścisłym każde przypisanie do właściwości niezapisywalnej, właściwości pobierającej tylko, nieistniejącej właściwości, nieistniejącej zmiennej lub nieistniejącego obiektu spowoduje zgłoszenie błędu.


Niedozwolone w trybie ścisłym

Używanie zmiennej bez jej deklaracji jest niedozwolone:

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

Obiekty też są zmiennymi.

Posługiwanie się przedmiotem bez zadeklarowania tego jest zabronione:

"use strict";
x = {p1:10, p2:20};      // This will cause an error

Usunięcie zmiennej (lub obiektu) jest niedozwolone.

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

Usunięcie funkcji jest niedozwolone.

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

Powielanie nazwy parametru jest niedozwolone:

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

Literały ósemkowe nie są dozwolone:

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

Znaki ucieczki ósemkowej są niedozwolone:

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

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

"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

Zapisywanie we właściwości typu „tylko do pobrania” jest niedozwolone:

"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

Usunięcie właściwości, której nie można usunąć, jest niedozwolone:

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

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

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

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

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

Oświadczenie withjest niedozwolone:

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

Ze względów bezpieczeństwa eval()nie wolno tworzyć zmiennych w zakresie, z którego zostało wywołane:

"use strict";
eval ("let x = 2");
alert (x);             // This will cause an error

Słowo thiskluczowe w funkcjach zachowuje się inaczej w trybie ścisłym.

Słowo thiskluczowe odnosi się do obiektu, który wywołał funkcję.

Jeśli obiekt nie jest określony, funkcje w trybie ścisłym zwrócą, undefineda funkcje w trybie normalnym zwrócą obiekt globalny (okno):

"use strict";
function myFunction() {
  alert(this); // will alert "undefined"
}
myFunction();


Dowód na przyszłość!

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

To są:

  • przybory
  • berło
  • pozwalać
  • pakiet
  • prywatny
  • chroniony
  • publiczny
  • statyczny
  • dawać
"use strict";
let public = 1500;      // This will cause an error

Uważaj!

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