JavaScript „use strict”
'use strict';
określa, że kod JavaScript powinien być wykonywany w trybie „strict”. Ułatwia to pisanie dobrego i bezpiecznego kodu JavaScript. Na przykład,
myVariable = 9;
Tutaj, myVariable jest tworzona bez deklarowania. Działa to jako zmienna globalna w JavaScript. Jednakże, jeśli użyjesz tego w trybie ścisłym, program wyrzuci błąd. Na przykład,
'use strict';// ErrormyVariable = 9;
Powyższy kod wyrzuca błąd, ponieważ zmienna myVariable nie jest zadeklarowana. W trybie ścisłym nie można używać zmiennych bez ich zadeklarowania.
Aby wskazać, że ten program jest w trybie ścisłym, użyliśmy
'use strict';
na górze programu.
Tryb ścisły można zadeklarować poprzez dodanie 'use strict';
lub "use strict";
na początku programu.
Kiedy zadeklarujesz tryb ścisły na początku programu, będzie on miał zasięg globalny i cały kod w programie będzie wykonywany w trybie ścisłym.
Tryb ścisły w zmiennej
W trybie ścisłym, użycie zmiennej bez jej zadeklarowania powoduje błąd.
Uwaga: Musisz zadeklarować tryb ścisły na początku programu. Jeśli zadeklarujesz tryb ścisły poniżej jakiegoś kodu, nie będzie on działał.
Na przykład,
console.log("some code");// 'use strict' is ignored// must be at the top"use strict";x = 21; // does not throw an error
Tryb ścisły w funkcji
Możesz również użyć trybu ścisłego wewnątrz funkcji. Na przykład,
myVariable = 9;console.log(myVariable); // 9function hello() { // applicable only for this function 'use strict'; string = 'hello'; // throws an error}hello();
Jeśli użyjesz 'use strict';
wewnątrz funkcji, kod wewnątrz funkcji będzie w trybie ścisłym.
W powyższym programie, 'use strict';
jest użyty wewnątrz funkcji hello()
. Stąd, tryb ścisły obowiązuje tylko wewnątrz funkcji.
Jak widać, na początku programu, myVariable
jest użyty bez deklaracji.
Jeśli zadeklarujesz 'use strict';
na początku programu, nie możesz użyć zmiennej bez zadeklarowania jej również wewnątrz funkcji. Na przykład,
// applicable to whole program'use strict';function hello() { string = 'hello'; // throws an error}hello();
Uwaga : Tryb ścisły nie ma zastosowania do deklaracji blokowych z {}
nawiasami klamrowymi.
Rzeczy niedozwolone w trybie ścisłym
1. Niezadeklarowana zmienna jest niedozwolona.
'use strict';a = 'hello'; // throws an error
2. Niezadeklarowane obiekty są niedozwolone.
'use strict';person = {name: 'Carla', age: 25}; // throws an error
3. Usuwanie obiektu jest niedozwolone.
'use strict';let person = {name: 'Carla'};delete person; // throws an error
4. Powielanie nazwy parametru jest niedozwolone.
"use strict";function hello(p1, p1) { console.log('hello')}; // throws an errorhello();
5. Przypisywanie do właściwości typu non-writable nie jest dozwolone.
'use strict';let obj1 = {};Object.defineProperty(obj1, 'x', { value: 42, writable: false });// assignment to a non-writable propertyobj1.x = 9; // throws an error
6. Przypisywanie do właściwości typu getter-only nie jest dozwolone.
'use strict';let obj2 = { get x() { return 17; } };// assignment to a getter-only propertyobj2.x = 5; // throws an error
7. Przypisywanie do nowej właściwości na obiekcie nierozszerzalnym nie jest dozwolone.
'use strict';let obj = {};Object.preventExtensions(obj);// Assignment to a new property on a non-extensible objectobj.newValue = 'new value'; // throws an error
8. Składnia oktalna nie jest dozwolona.
'use strict';let a = 010; // throws an error
9. Nazwa zmiennej arguments i eval nie są dozwolone.
'use strict';let arguments = 'hello'; // throws an errorlet eval = 44;
10. Nie można również używać tych zarezerwowanych słów kluczowych w trybie ścisłym.
implements
interface
let
package
private
protected
public
static
yield
Korzyści wynikające z zastosowania trybu ścisłego
Zastosowanie trybu ścisłego:
- pomaga pisać czystszy kod
- zmienia wcześniej akceptowane ciche błędy (zła składnia) na prawdziwe błędy i rzuca komunikat o błędzie
- ułatwia pisanie „bezpiecznego” JavaScriptu
.