Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Każda właściwość obiektu posiada ukryte atrybuty, które definiują jej zachowanie. Te atrybuty nie są widoczne w standardowym kodzie, ale mają kluczowe znaczenie dla działania i kontroli właściwości obiektów. Główne atrybuty właściwości to:

  1. Zapisywalna (writable): Określa, czy wartość właściwości może być zmieniona. Jeśli atrybut writable jest ustawiony na false, wartość właściwości jest tylko do odczytu, co oznacza, że nie możesz jej zmodyfikować po jej utworzeniu.
  2. Wyliczalna (enumerable): Określa, czy właściwość pojawi się w pętlach iteracyjnych, takich jak for...in lub w metodach, które zwracają listę właściwości, np. Object.keys(). Jeśli atrybut enumerable jest ustawiony na false, właściwość nie będzie uwzględniana w takich iteracjach.
  3. Konfigurowalna (configurable): Określa, czy właściwość może być usunięta z obiektu oraz czy jej atrybuty (poza writable do false) mogą być modyfikowane. Jeśli configurable jest ustawione na false, nie możesz usunąć właściwości ani zmienić jej atrybutów enumerable i configurable, ale nadal możesz zmienić jej atrybut writable na false (jeśli wcześniej był true).

Przykład 1: Zmiana writable na false

const user = {
  id: 1,
  username: 'johndoe',
  password: 's3cr3t'
};

// Zmieniamy 'writable' na 'false' dla 'password'
Object.defineProperty(user, 'password', {
  writable: false
});

user.password = 'newPassword'; // Próba zmiany hasła

console.log(user.password); // 's3cr3t'

Po ustawieniu writable: false, próba zmiany wartości password nie powiedzie się (bez wyświetlania błędu w trybie non-strict). Wartość password pozostaje niezmieniona, co jest przydatne, gdy chcemy zapobiec przypadkowej zmianie ważnych danych użytkownika.

Przykład 2: Zmiana enumerable na false

Object.defineProperty(user, 'password', {
  enumerable: false
});

for (const key in user) {
  console.log(key); // 'id', 'username'
}

Po ustawieniu enumerable: false dla password, właściwość ta nie będzie wyświetlana w pętlach for...in ani nie zostanie zwrócona przez Object.keys(user), co jest przydatne, gdy nie chcemy, aby wrażliwe dane były łatwo dostępne podczas enumeracji właściwości obiektu.

Przykład 3: Zmiana configurable na false

Object.defineProperty(user, 'id', {
  configurable: false,
  writable: false
});

Object.defineProperty(user, 'id', {
  writable: true // Próba zmiany 'writable' na 'true' po ustawieniu 'configurable' na 'false'
}); 

console.log(Object.getOwnPropertyDescriptor(user, 'id').writable); // false

Przy próbie zmiany writable na false, dostajemy błąd:

Uncaught TypeError: Cannot redefine property: id

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *