Object() создаёт объект или преобразует значение в объект.
Это встроенная функция JavaScript, но в обычном коде для создания простых объектов чаще используют литерал {}.
Синтаксис
Object()
Object(value)
Её также можно вызвать через new:
new Object()
new Object(value)
Что делает Object()
Если вызвать Object() без аргументов, получится пустой объект:
console.log(Object()); // {}
console.log(new Object()); // {}
Object() и пустой объект
Для обычного создания объекта чаще пишут так:
const user = {};
Это короче и привычнее, чем:
const user = Object();
Поэтому Object() полезно знать, но в простых случаях обычно используют именно {}.
Если передать объект
Если в Object() уже передать объект, он просто вернётся обратно.
const user = { name: "Anna" };
const result = Object(user);
console.log(result === user); // true
Новый объект здесь не создаётся.
Если передать null или undefined
Object(null) и Object(undefined) возвращают пустой объект.
console.log(Object(null)); // {}
console.log(Object(undefined)); // {}
Это важное отличие от некоторых других способов работы со значениями.
Если передать примитив
Если передать число, строку или boolean, Object() создаст объект-обёртку.
console.log(Object("hello")); // String {"hello"}
console.log(Object(123)); // Number {123}
console.log(Object(true)); // Boolean {true}
На практике такие обёртки почти никогда не нужны напрямую.
Почему это не то же самое, что обычное значение
Примитив и объект-обёртка - не одно и то же.
const a = "hello";
const b = Object("hello");
console.log(typeof a); // "string"
console.log(typeof b); // "object"
Из-за этого поведение может отличаться:
const value = Object(false);
if (value) {
console.log("Условие выполнится");
}
Хотя внутри лежит false, сам объект считается truthy.
Object() и new Object()
В большинстве случаев результат у них одинаковый.
const a = Object();
const b = new Object();
console.log(a); // {}
console.log(b); // {}
Поэтому в современном коде new Object() обычно используют редко.
Object() и
Эти записи могут давать похожий результат:
const a = Object();
const b = {};
console.log(a); // {}
console.log(b); // {}
Но для обычных объектов литерал {}:
- короче
- читается проще
- чаще встречается в реальном коде
Именно поэтому для создания обычного объекта обычно выбирают {}.
Когда Object() действительно полезен
Object() может пригодиться, когда:
- нужно явно преобразовать значение в объект
- код работает с неизвестным типом значения
- вы читаете старый код, где этот стиль уже используется
Пример:
const value = "hello";
const result = Object(value);
console.log(result); // String {"hello"}
console.log(typeof result); // "object"
Object() не делает глубокую копию
Если передать в Object() объект, копия не создаётся.
const user = { name: "Anna" };
const result = Object(user);
result.name = "Ivan";
console.log(user.name); // "Ivan"
result и user здесь ссылаются на один и тот же объект.
Частые ошибки
Использовать Object() вместо
const user = Object();
В обычном коде обычно проще так:
const user = {};
Думать, что Object(obj) создаёт копию
const user = { name: "Anna" };
const result = Object(user);
console.log(result === user); // true
Это тот же самый объект.
Забывать про объект-обёртку для примитивов
const value = Object(false);
console.log(typeof value); // "object"
Это уже не обычный boolean, а объект.
Быстрая памятка
Object()создаёт объект или преобразует значение в объект- без аргументов возвращает
{} Object(null)иObject(undefined)тоже дают пустой объект- если передать объект, он просто вернётся обратно
- для обычного создания объекта чаще используют литерал
{}
Коротко
Object() - это встроенная функция JavaScript для создания и преобразования объектов. Главное, что стоит запомнить: для обычных объектов почти всегда удобнее использовать {}, а Object(value) чаще полезен именно как способ явного преобразования значения в объект.