Object: примеры (JAVASCRIPT)

Руководство по работе с Object в JavaScript
Раздел: Основные типы, Конструкторы
Object(value (any)): object

Конструктор Object в JavaScript

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

Основные способы использования:

  • Создание пустых объектов: new Object() или Object()
  • Преобразование значений в объекты: Object(value)
  • Статические методы для работы со свойствами объектов

Аргументы конструктора:

  • value (опциональный) - примитивное значение, которое будет преобразовано в объект. При null или undefined возвращается пустой объект. При передаче объекта возвращает тот же объект.

Возвращаемое значение:

  • Объект-обертка для примитивных значений
  • Пустой объект при отсутствии аргументов или передаче null/undefined
  • Тот же объект, если аргумент уже является объектом

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

Базовые примеры использования

Создание различных типов объектов:

// Пустой объект
const obj1 = new Object();
console.log(obj1);
{}
// С аргументом-строкой
const obj2 = new Object('текст');
console.log(obj2);
String {'текст'}
// С числовым аргументом
const obj3 = Object(42);
console.log(typeof obj3);
object
// С передачей объекта
const existing = {x: 1};
const obj4 = Object(existing);
console.log(obj4 === existing);
true

Использование статических методов:

// Object.keys()
const user = {name: 'Анна', age: 25};
console.log(Object.keys(user));
['name', 'age']
// Object.assign()
const target = {a: 1};
const source = {b: 2};
const result = Object.assign(target, source);
console.log(result);
{a: 1, b: 2}

Альтернативные подходы в JavaScript

Для создания объектов доступны несколько синтаксических вариантов:

Литерал объекта:

const obj = {prop: 'value'}; // Более читаемый и производительный

Object.create():

const proto = {greet() { return 'Привет'; }};
const obj = Object.create(proto); // Создание с указанием прототипа

Функции-конструкторы:

function Person(name) {
  this.name = name;
}
const person = new Person('Иван');

Классы ES6:

class User {
  constructor(name) { this.name = name; }
}
const user = new User('Мария');

Выбор подхода зависит от конкретной задачи: литералы для простых объектов, классы для ООП, Object.create() для тонкого управления прототипами.

Распространенные ошибки

1. Неявное создание глобальных переменных:

function createObj() {
  obj = new Object(); // Отсутствует var/let/const
  obj.value = 1;
}
createObj();
console.log(window.obj); // obj стала глобальной
{value: 1}

2. Путаница с примитивами и объектами:

const str = new String('текст');
typeof str; // 'object'
const prim = 'текст';
typeof prim; // 'string'
'object'
'string'

3. Мутация исходного объекта:

const original = {a: 1};
const copy = Object(original);
copy.a = 2;
console.log(original.a); // Изменился оригинал
2

4. Неправильное использование с null/undefined:

const obj = Object(null);
console.log(obj); // Работает
const obj2 = Object(undefined);
console.log(obj2); // Работает
// Но:
const empty = new Object(undefined);
empty.prop = 'value'; // Не вызывает ошибок

Эволюция возможностей Object

ES5 (2009):

  • Методы Object.create(), Object.defineProperty()
  • Статические методы для контроля изменений: freeze(), seal(), preventExtensions()
  • Методы для получения ключей и дескрипторов

ES6 (2015):

  • Object.assign() для копирования свойств
  • Object.setPrototypeOf() для изменения прототипа
  • Object.values(), Object.entries()

ES2017:

  • Object.getOwnPropertyDescriptors()

ES2019:

  • Object.fromEntries() для преобразования пар ключ-значение в объект

ES2022:

  • Статические методы Object.hasOwn() как замена hasOwnProperty()

Расширенные примеры применения

Создание объектов с определенным прототипом:

Пример javascript
const animal = {
  speak() {
    return this.sound || '...';
  }
};
const dog = Object.create(animal);
dog.sound = 'Гав!';
console.log(dog.speak());
console.log(Object.getPrototypeOf(dog) === animal);
Гав!
true

Управление свойствами с дескрипторами:

Пример javascript
const config = {};
Object.defineProperty(config, 'apiKey', {
  value: 'secret123',
  writable: false,
  enumerable: false,
  configurable: false
});
console.log(config.apiKey);
console.log(Object.keys(config)); // apiKey не перечисляется
secret123
[]

Имитация классов до ES6:

Пример javascript
function Vehicle(type) {
  this.type = type;
}
Vehicle.prototype.move = function() {
  return `Транспорт типа ${this.type} движется`;
};
const car = new Vehicle('автомобиль');
console.log(car.move());
console.log(car instanceof Vehicle);
Транспорт типа автомобиль движется
true

Глубокое клонирование через сериализацию:

Пример javascript
const complex = {
  date: new Date(),
  nested: { x: [1, 2, 3] }
};
const clone = JSON.parse(JSON.stringify(complex));
console.log(clone.nested.x);
console.log(clone.date); // Дата стала строкой
[1, 2, 3]
2024-01-15T10:30:00.000Z

Использование Object.freeze():

Пример javascript
const constants = Object.freeze({
  PI: 3.14159,
  VERSION: '1.0'
});
constants.PI = 3.14; // В строгом режиме вызовет ошибку
console.log(constants.PI); // Осталось прежнее значение
3.14159

Аналоги в других языках

Python:

# Словарь (аналог объекта)
dict_obj = {'key': 'value'}
print(type(dict_obj))
<class 'dict'>

Классы создаются через оператор class, объекты - через конструктор.

PHP:

// Ассоциативный массив
$array = ['key' => 'value'];
// Объект stdClass
$obj = new stdClass();
$obj->key = 'value';

PHP использует ассоциативные массивы как основную структуру, похожую на JavaScript объекты.

Java:

// HashMap
Map map = new HashMap<>();
map.put("key", "value");
// Создание класса
public class MyClass {
    private String key;
    public MyClass(String k) { this.key = k; }
}

В Java отсутствует прямой аналог динамических объектов JavaScript.

JS Object function comments

En
Object Creates a new object