Výukový program JS

JS HOME Úvod do JS JS Kam vést Výstup JS JS prohlášení Syntaxe JS Komentáře JS JS proměnné JS Let JS Const Operátoři JS JS aritmetika Zadání JS JS datové typy Funkce JS JS objekty Události JS JS struny JS String Methods JS String Search Šablony řetězců JS JS čísla Metody čísel JS JS Arrays Metody JS Array JS Array Sort Iterace pole JS JS Array Const JS Termíny Formáty data JS JS metody získávání data JS metody nastavení data JS Math JS Náhodný JS Booleans JS Srovnání Podmínky JS Přepínač JS JS Loop For JS Loop For In JS Loop For Of Zatímco JS Loop JS Break JS Iterables Sady JS Mapy JS Typ JS Konverze typu JS JS Bitwise JS RegExp Chyby JS Rozsah JS JS Zvedací zařízení Přísný režim JS JS toto klíčové slovo Funkce šipky JS JS třídy JS JSON Ladění JS Průvodce stylem JS JS Best Practices Chyby JS Výkon JS JS Reserved Words

Verze JS

Verze JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge Historie JS

JS objekty

Definice objektů Vlastnosti objektu Objektové metody Zobrazení objektu Objektové přístupové objekty Konstruktory objektů Prototypy objektů Iterovatelné objekty Sady objektů Mapy objektů Reference objektu

Funkce JS

Definice funkcí Funkční parametry Vyvolání funkce Volání funkce Funkce Použít Funkční uzávěry

JS třídy

Úvod do třídy Třídní dědičnost Třída Statická

JS Async

JS zpětná volání JS asynchronní JS Sliby JS Async/Await

JS HTML DOM

Úvod do DOM Metody DOM Dokument DOM Prvky DOM DOM HTML Formuláře DOM DOM CSS DOM animace Události DOM DOM Event Listener Navigace DOM DOM uzly Kolekce DOM Seznamy uzlů DOM

Kusovník prohlížeče JS

Okno JS Obrazovka JS Umístění JS Historie JS JS Navigator Popup Alert JS Časování JS Soubory cookie JS

Webová rozhraní API JS

Úvod do webového rozhraní API Web Forms API Webová historie API Web Storage API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

Úvod do AJAXu AJAX XMLHttp Požadavek AJAX Odpověď AJAX Soubor XML AJAX AJAX PHP AJAX ASP Databáze AJAX Aplikace AJAX Příklady AJAX

JS JSON

Úvod do JSON Syntaxe JSON JSON vs XML Datové typy JSON Analýza JSON JSON Stringify Objekty JSON Pole JSON Server JSON JSON PHP JSON HTML JSON JSONP

JS vs jQuery

Selektory jQuery HTML jQuery jQuery CSS jQuery DOM

Grafika JS

Grafika JS JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

Příklady JS

Příklady JS JS HTML DOM Vstup HTML JS JS HTML objekty JS HTML události Prohlížeč JS Editor JS Cvičení JS JS kvíz Certifikát JS

JS Reference

Objekty JavaScriptu HTML DOM objekty


Přísné použití JavaScriptu


"use strict"; Definuje, že kód JavaScript by měl být spuštěn v „přísném režimu“.


Směrnice "použít přísné použití".

Směrnice "use strict"byla nová ve verzi ECMAScript 5.

Není to prohlášení, ale doslovný výraz, ignorovaný dřívějšími verzemi JavaScriptu.

Účelem "use strict"je naznačit, že kód by měl být spuštěn v "přísném režimu".

V přísném režimu nemůžete například používat nedeklarované proměnné.

Všechny moderní prohlížeče podporují „použít přísné“ kromě Internet Exploreru 9 a nižších:

Directive
"use strict" 13.0 10.0 4.0 6.0 12.1

Čísla v tabulce určují první verzi prohlížeče, která plně podporuje direktivu.

Přísný režim můžete použít ve všech svých programech. Pomáhá vám psát čistší kód, například vám brání v používání nedeklarovaných proměnných.

"use strict" je jen řetězec, takže IE 9 nevyhodí chybu, i když jí nebude rozumět.


Vyhlášení přísného režimu

Přísný režim je deklarován přidáním „použít přísný“; na začátek skriptu nebo funkce.

Deklarováno na začátku skriptu, má globální rozsah (veškerý kód ve skriptu se spustí v přísném režimu):

Příklad

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

Příklad

"use strict";
myFunction();

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

Deklarovaná uvnitř funkce má místní rozsah (pouze kód uvnitř funkce je v přísném režimu):

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;   // This will cause an error
}


"použít přísné"; Syntax

Syntaxe pro deklaraci přísného režimu byla navržena tak, aby byla kompatibilní se staršími verzemi JavaScriptu.

Kompilace číselného literálu (4 + 5;) nebo řetězcového literálu ("John Doe";) v programu JavaScript nemá žádné vedlejší účinky. Jednoduše se zkompiluje do neexistující proměnné a zemře.

Záleží tedy "use strict";pouze na nových kompilátorech, kteří "chápou" význam toho.


Proč Strict Mode?

Přísný režim usnadňuje psaní „zabezpečeného“ JavaScriptu.

Přísný režim mění dříve přijatou „špatnou syntaxi“ na skutečné chyby.

Například v normálním JavaScriptu nesprávným zadáním názvu proměnné vznikne nová globální proměnná. V přísném režimu to způsobí chybu, což znemožní náhodné vytvoření globální proměnné.

V normálním JavaScriptu vývojář neobdrží žádnou zpětnou vazbu o chybách přiřazování hodnot vlastnostem, do kterých nelze zapisovat.

V přísném režimu vyvolá jakékoli přiřazení k nezapisovatelné vlastnosti, vlastnosti pouze pro získání, neexistující vlastnosti, neexistující proměnné nebo neexistujícímu objektu chybu.


Není povoleno v přísném režimu

Použití proměnné bez její deklarace není povoleno:

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

Objekty jsou také proměnné.

Použití objektu bez jeho deklarace není povoleno:

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

Smazání proměnné (nebo objektu) není povoleno.

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

Smazání funkce není povoleno.

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

Duplikování názvu parametru není povoleno:

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

Osmičkové číselné literály nejsou povoleny:

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

Osmičkové řídicí znaky nejsou povoleny:

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

Zápis do vlastnosti pouze pro čtení není povolen:

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

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

Zápis do vlastnosti pouze pro získání není povolen:

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

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

Smazání neodstranitelné vlastnosti není povoleno:

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

Slovo evalnelze použít jako proměnnou:

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

Slovo argumentsnelze použít jako proměnnou:

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

Prohlášení withnení povoleno:

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

Z bezpečnostních důvodů eval()není povoleno vytvářet proměnné v rozsahu, ze kterého byly volány:

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

Klíčové thisslovo ve funkcích se v přísném režimu chová jinak.

Klíčové thisslovo odkazuje na objekt, který volal funkci.

Pokud objekt není zadán, funkce v přísném režimu se vrátí undefineda funkce v normálním režimu vrátí globální objekt (okno):

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


Budoucí důkaz!

Klíčová slova vyhrazená pro budoucí verze JavaScriptu NELZE použít jako názvy proměnných v přísném režimu.

Tyto jsou:

  • nářadí
  • rozhraní
  • nechat
  • balík
  • soukromý
  • chráněný
  • veřejnost
  • statický
  • výtěžek
"use strict";
let public = 1500;      // This will cause an error

Dávej si pozor!

Direktiva "use strict" je rozpoznána pouze na začátku skriptu nebo funkce.