W JavaScript, undefined
jest prymitywną wartością, która reprezentuje brak przypisanej wartości. W przeszłości, ze względu na mniej ścisłe zasady języka, istniała możliwość nadpisania undefined
. Jednak we współczesnym JavaScript (od ECMAScript 5), undefined
jest właściwością tylko do odczytu na globalnym obiekcie, co oznacza, że próby jej nadpisania są nieskuteczne w ścisłym trybie (‘use strict’). Sprawdźmy to na przykładzie.
Przykład: próba nadpisania undefined
Zobaczmy kod, który demonstruje próbę nadpisania undefined
i jak to się zachowuje w różnych kontekstach.
<!DOCTYPE html>
<html>
<head>
<title>Nadpisywanie `undefined` w JavaScript</title>
</head>
<body>
<script>
'use strict'; // Włączenie ścisłego trybu
// Próba nadpisania `undefined`
try {
undefined = 'Nowa wartość';
} catch (e) {
console.log('Błąd podczas nadpisywania `undefined`: ', e.message);
}
// Sprawdzenie czy `undefined` zostało nadpisane
console.log(undefined); // Nadal wypisuje `undefined`
// Bez ścisłego trybu
(function() {
undefined = 'Bez ścisłego trybu';
console.log('Wartość `undefined` w funkcji bez ścisłego trybu: ', undefined);
// Nadal `undefined`, ale w niektórych starszych środowiskach
// może wyświetlić "Bez ścisłego trybu"
})();
</script>
</body>
</html>
Omówienie
- W ścisłym trybie (‘use strict’), każda próba nadpisania
undefined
kończy się wyjątkiem, co jest pokazane w pierwszej części kodu. - Poza ścisłym trybem, starsze środowiska JavaScript mogły pozwalać na nadpisanie
undefined
, ale we współczesnym JavaScript, nawet w trybie nieścisłym, globalneundefined
zachowuje się jako tylko do odczytu.
Podsumowanie
Współczesny JavaScript traktuje undefined
jako niezmienną wartość globalną, co oznacza, że nie można jej nadpisać w ścisłym trybie (‘use strict’) i w większości przypadków również poza nim. Jest to ważna cecha języka, zapewniająca spójność i bezpieczeństwo kodu. Stosowanie ścisłego trybu jest zalecane, aby uniknąć potencjalnych problemów i niezamierzonych efektów w kodzie, takich jak niechciane nadpisywanie kluczowych słów lub globalnych wartości, w tym undefined
.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video JavaScript w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.