PROG_WAY_BLOG Telegram 123
​​Как запретить изменение объекта

Итак, этот вопрос встречается на собеседованиях довольно часто в разных формулировках. В этом посте постараюсь дать максимально обширный ответ на этот вопрос.

Для объяснения введём объект для примеров:
const obj = {
name: "progway",
type: "channel",
subscribers: 435
}

Чтобы запретить изменения объекта существует два метода — Object.freeze и Object.seal. Они оба запрещают изменять объект, но только по разному.

Object.seal запрещает добавлять в объект новые свойства. Если мы попытаемся добавить в объект новое поле, например avatar, которое будет URL-ом до аватарки канала, то мы это сделать не сможем. Но изменять свойства объекта получится:
Object.seal(obj)
obj.avatar = '...url'
obj.subscribers = 999

После выполнения этого кода получим объект:
{
name: "progway",
type: "channel",
subscribers: 999
}

Свойство avatar просто не будет добавлено. При этом в strict режиме мы получим TypeError. Об этом режиме расскажу в следующих постах, но это важно знать уже сейчас.

Object.freeze действует на объект так же, как и Object.seal, но при этом не позволяет изменять уже записанные свойства. Состояние полностью замораживается и не может быть изменено:
Object.freeze(obj)
obj.avatar = '...url'
obj.subscribers = 9999

После выполнения получим объект:
{
name: "progway",
type: "channel",
subscribers: 435
}

Все манипуляции с объектом проигнорируются, в strict режиме так же получаем TypeError.

При этом стоит понимать, что обе этих функции не осуществляют рекурсивных преобразований, а как следствие, замораживают только верхний уровень свойств:
const obj = {
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "jpeg"
}
}

Object.freeze(obj)
obj.avatar.extension = "png"

После выполнения кода получим:
{
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "png"
}
}

То есть проблем с изменениями нет.

И часто функцию deepFreeze просят написать на собеседованиях. Всвязи с этим запускаю ещё один опрос ниже, информацию о нём можете прочитать следующим постом.

И на этом у меня всё, спасибо за прочтение, это важно для меня ❤️

#theory #web
👍3



tgoop.com/prog_way_blog/123
Create:
Last Update:

​​Как запретить изменение объекта

Итак, этот вопрос встречается на собеседованиях довольно часто в разных формулировках. В этом посте постараюсь дать максимально обширный ответ на этот вопрос.

Для объяснения введём объект для примеров:

const obj = {
name: "progway",
type: "channel",
subscribers: 435
}

Чтобы запретить изменения объекта существует два метода — Object.freeze и Object.seal. Они оба запрещают изменять объект, но только по разному.

Object.seal запрещает добавлять в объект новые свойства. Если мы попытаемся добавить в объект новое поле, например avatar, которое будет URL-ом до аватарки канала, то мы это сделать не сможем. Но изменять свойства объекта получится:
Object.seal(obj)
obj.avatar = '...url'
obj.subscribers = 999

После выполнения этого кода получим объект:
{
name: "progway",
type: "channel",
subscribers: 999
}

Свойство avatar просто не будет добавлено. При этом в strict режиме мы получим TypeError. Об этом режиме расскажу в следующих постах, но это важно знать уже сейчас.

Object.freeze действует на объект так же, как и Object.seal, но при этом не позволяет изменять уже записанные свойства. Состояние полностью замораживается и не может быть изменено:
Object.freeze(obj)
obj.avatar = '...url'
obj.subscribers = 9999

После выполнения получим объект:
{
name: "progway",
type: "channel",
subscribers: 435
}

Все манипуляции с объектом проигнорируются, в strict режиме так же получаем TypeError.

При этом стоит понимать, что обе этих функции не осуществляют рекурсивных преобразований, а как следствие, замораживают только верхний уровень свойств:
const obj = {
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "jpeg"
}
}

Object.freeze(obj)
obj.avatar.extension = "png"

После выполнения кода получим:
{
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "png"
}
}

То есть проблем с изменениями нет.

И часто функцию deepFreeze просят написать на собеседованиях. Всвязи с этим запускаю ещё один опрос ниже, информацию о нём можете прочитать следующим постом.

И на этом у меня всё, спасибо за прочтение, это важно для меня ❤️

#theory #web

BY progway — программирование, IT




Share with your friend now:
tgoop.com/prog_way_blog/123

View MORE
Open in Telegram


Telegram News

Date: |

Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. Click “Save” ; The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. How to create a business channel on Telegram? (Tutorial)
from us


Telegram progway — программирование, IT
FROM American