---
description: >-
  Свойства - пары ключ: значение, описывающие сущность, как существительные и
  прилагательные, отвечают на вопросы: Кто? Что? Какой? Какая?
---

# Свойства объекта

Ключ - локальная переменная в {}, значение - значение такой переменной.

Имя ключа - всегда строка, даже если указана как локальная переменная, все-равно интерпретатор считывает имя переменной, как строчное имя ключа в свойстве объекта.

## Создание свойств

Ключ можно описать двумя способами

```
const object = {
    firstName: 'Sandra',
    'last name': 'Hrevtsova';
}; 
```

Причем, в первом случае, мы создаем локальную переменную со строчным идентификатором `'firstName'`, в котором не допустимы пробелы и применимы все правила именования переменных.

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

Свойства в объекте можно указывать как при создании объекта, так и добавлять в уже существующий объект.

```
object.age = 18;
object['gender'] = 'female';
```

При добавлении нового свойства в объект, можно указать его ключ через точку после обращения к переменной с объектом, так и указав строчный ключ в квадратных скобках.

Черех оператор присвоения `=` присваиваем значение для нового ключа в объекте.

## Доступ к свойствам

Для получения значения из свойств объекта также используется обращение к ключу через точку после имени объекта или через указание строчного имени ключа в квадратных скобках `[]`.

```
console.log(object.age); // 18
console.log(object['gender']); // female
```

## Изменение свойств

Для изменения значения свойства, мы снова обращаемся к нему одним из двух выше указанных способов и через оператор присвоения `=` задаем новое значение.

```
object.age = 32;
console.log(object.age); // 32

object['last name'] = 'last name'
console.log(object['last name']); // last name
```

Так как ключи свойств объекта - это локальные переменные внутри блока `{}`, они как бы инициализированы через `let` и могут принимать новые значения, как локальные переменные циклов и параметры функций например.

## Удаление свойств

На самом деле, мі крайне редко что-то удаляем, тем более внутри данных.

Это отдельная глубокая тема мутации данных и нам, как разработчикам всегда следует внимательно работать с изменением значение и тем более, их удалением.

Тем не менее, нам не помешает знать, как удалять не нужные свойства из объекта.

Для этого существует оператор `delete`.

```
delete object.age;
console.log(object.age); // undefined

delete object['last name'];
console.log(object['last name']); // undefined
```

Если обратиться к удаленным свойствам, то вернется `undefined`, потому что после вызова оператора `delete`, свойство в объекте не существует и возвращается значение `неопределено`.
