Объекты используются для хранения коллекций различных данных и более сложных сущностей с ключами. Объект можно создать с фигурными скобками {…} с необязательным списком свойств. Свойство — это пара «ключ: значение», где key — это строка (также называемая «именем свойства»), а value может быть чем угодно.

Ниже приведен пример того, как выглядит объект.

переменная пользователь = {

имя: «Джон»,

возраст: 30

};

Здесь «имя» и «возраст» называются ключами объекта пользователь, а «Джон» и 30 называются значениями объекта. пользователь.

Мы можем добавлять, удалять и читать файлы из него в любое время.

Значения свойств доступны с использованием записи через точку:

// get property values of the object:
alert( user.name ); // John
alert( user.age ); // 30

Чтобы удалить свойство, мы можем использовать оператор delete:

delete user.age;

Объект.создать():

Давайте посмотрим, как работает Object.create() на примере.

Пример:

const person = {
isHuman: false,
printIntroduction: function() {
console.log(`Меня зовут ${this.name}. Я человек? ${this.isHuman }`);
}
};

const me = Object.create(человек);

me.name = 'Мэттью'; // «имя» — это свойство, установленное для «меня», но не для «человека»
me.isHuman = true; // унаследованные свойства могут быть перезаписаны

me.printIntroduction();
// ожидаемый результат: «Меня зовут Мэтью. Я человек? истинный"

Расчетные свойства

Мы можем использовать квадратные скобки в литерале объекта при создании объекта. Это называется вычисляемые свойства.

Например:

let fruit = prompt("Which fruit to buy?", "apple");
let bag = {
  [fruit]: 5, // the name of the property is taken from the variable fruit
};
alert( bag.apple ); // 5 if fruit="apple"

Ограничения имен свойств

Как мы уже знаем, переменная не может иметь имя, равное одному из зарезервированных для языка слов, таких как «for», «let», «return» и т. д.

Но для свойства объекта такого ограничения нет:

// these properties are all right
let obj = {
  for: 1,
  let: 2,
  return: 3
};
alert( obj.for + obj.let + obj.return );  // 6

Есть небольшая ошибка со специальным свойством с именем __proto__. Мы не можем установить его в значение, не являющееся объектом:

let obj = {};
obj.__proto__ = 5; // assign a number
alert(obj.__proto__); // [object Object] - the value is an object, didn't work as intended

Как видно из кода, присваивание примитиву 5 игнорируется.

Проверка существования свойства, оператор «в»

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

Чтение несуществующего свойства просто возвращает undefined. Таким образом, мы можем легко проверить, существует ли свойство:

let user = {};
alert( user.noSuchProperty === undefined ); // true means "no such property"

Для этого также есть специальный оператор "in".

Синтаксис:

"key" in object

Например:

let user = { name: "John", age: 30 };
alert( "age" in user ); // true, user.age exists
alert( "blabla" in user ); // false, user.blabla doesn't exist

Цикл for…in

Для обхода всех ключей объекта существует специальная форма цикла: for..in. Это полностью отличается от конструкции for(;;), которую мы изучали ранее.

Синтаксис:

for (key in object) {
  // executes the body for each key among object properties
}

Например, выведем все свойства user:

let user = {
  name: "John",
  age: 30,
  isAdmin: true
};
for (let key in user) {
  // keys
  alert( key );  // name, age, isAdmin
  // values for the keys
  alert( user[key] ); // John, 30, true
}

Обратите внимание, что все конструкции for позволяют нам объявить переменную цикла внутри цикла, например let key здесь.

"Резюме"

Объекты представляют собой ассоциативные массивы с некоторыми особенностями.

В них хранятся свойства (пары ключ-значение), где:

  • Ключи свойств должны быть строками или символами (обычно строками).
  • Значения могут быть любого типа.

Чтобы получить доступ к свойству, мы можем использовать:

  • Точечное обозначение: obj.property.
  • Обозначение в квадратных скобках obj["property"]. Квадратные скобки позволяют взять ключ из переменной, например obj[varWithKey].

Дополнительные операторы:

  • Чтобы удалить свойство: delete obj.prop.
  • Чтобы проверить, существует ли свойство с данным ключом: "key" in obj.
  • Чтобы перебрать объект: for (let key in obj) цикл.