Strict Mode  to nowa funkcjonalność wprowadzona w ECMAScript 5, która umożliwia umiejscowienie kodu java script w specjalnym kontekście, który uniemożliwia wykonanie niektórych działań. Działania, które zostały zablokowane kończą się rzuceniem wyjątku.

Przypadki, w których pomaga 'strict mode':

- zapobiega działaniom, które są podejrzane lub niebezpieczne (np. uzyskanie dostępu do obiektu globalnego)

- wychwytuje działania, które można uznać za pomyłkę programisty i rzuca wyjątki,

- 'wyłącza' funkcje, która są mylące lub źle przemyślane


Praktyczne przykłady:

- włączenie strict mode w obrębie całego skryptu

'use strict';
// some code here...

- włączenie strict mode wewnątrz funkcji

function checkStrict() {
    // Włączamy strict mode w obrębie funkcji
    'use strict';
    console.log("Funkcja z włączonym strict mode.")
    function nestedStrict() {
        console.log("Funkcja zagnieżdzona także zostanie uruchomiona z włączonym strict mode.");
    }
    nestedStrict();
}
function outsideStrict() {
    console.log("Strict mode tutaj nie obowiązuje.");
}

- moduły z domyślnym strict mode

function strictModule() {
    // cała zawartość modułu zostanie uruchomiona z włączonym strict mode
}
export default strictModule;

Wybrane zmiany jakie powoduje włączenie strict mode

- typowe błędy programistyczne kończą się rzuceniem wyjątku, np. przypisanie wartości do niezadeklarowanej zmiennej.

'use strict'
heigh = 5;

Rzucony zostanie wyjątek:  Uncaught ReferenceError: heigh is not defined


- zapis do globalnych zmiennych typy 'non-writable' kończy się rzuceniem wyjątku, w przypadku wyłączonego strict mode, kod zostanie dalej wykonany

'use strict'
var undefined = 5;
var NaN = 5;

Obie operacje zakończą się wyjątkiem, np.:  Uncaught TypeError: Cannot assign to read only property 'NaN' of object '#<Window>'


- przypisanie wartośći do właściwości zmiennej typu getter kończy się rzuceniem wyjątku

'use strict'
var heigh = { get x() { return 150; } };
heigh.x = 5;

Wyjątek: Uncaught TypeError: Cannot set property x of #<Object> which has only a getter


- przypisanie wartości do nowej właściwości wartości dla obiektu zabronionego przed rozrzerzaniem'use strict'

var house = {};
Object.preventExtensions(house);
house.newProp = 'something'; // throws a TypeError

Wyjątek: Uncaught TypeError: Cannot add property newProp, object is not extensible

johny_bravo 03-02-2022 12:16
Dobrze opisany strict mode w js


© 2024 - SkillsTest.pl | | Regulamin | Polityka Prywatnosci