Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Объекты могут быть инициализированы с помощью new Object(), Object.create() или литеральной (инициирующей) нотации. Инициализатор объекта это разделённый запятыми список ноль или более пар имён свойств и ассоциируемых с ними значений, заключённых в фигурные скобки ({}).
Пожалуйста, просмотрите таблицу поддержки этих нотаций. В неподдерживаемом окружении, эти нотации приведут к синтаксической ошибке.
Инициализатор объекта это выражение, которое описывает инициализацию Object. Объекты состоят из свойств, которые используются для описания объекта. Значения свойств объектов могут содержать как примитивные типы данных, так и другие объекты.
Пустой объект без свойств может быть создан следующим образом:
Однако, преимущество литеральной или инициирующей нотации это возможность быстро создавать объекты со свойствами внутри фигурных скобок. Создаётся простой список пар ключ: значение, разделённых запятой. Следующий код создаёт объект с тремя парами значений и ключи это "foo", "age" и "baz". Значения этих ключей строка "bar", число 42 и другой объект.
После того, как создали объект, вы, вероятно, захотите прочитать или изменить его. Свойства объектов могут быть получены при помощи точечной нотации или квадратных скобок. Смотрите property accessors для детальной информации.
Мы уже рассмотрели, как объявить свойства, используя синтаксис инициализации. Зачастую, в коде появляются свойства, которые вы захотите поместить в объект. Вы увидите следующий код:
С ECMAScript 2015 появилась короткая нотация, способная достичь того же:
Когда используются одинаковые имена свойств, второе свойство перезапишет первое.
В строгом режиме ECMAScript 5, повторение имён свойств будет воспринято как SyntaxError. С введением вычисляемых имён свойств и появлением возможности создавать дубликаты во время выполнения кода, ECMAScript 2015 убрал это ограничение.
Свойство объекта также может ссылаться на function, getter или setter.
В ECMAScript 2015, доступна короткая нотация, поэтому слово "function" более не обязательно.
В ECMAScript 2015 есть способ кратко объявить свойства, чьими значениями являются генераторы функций:
Что эквивалентно следующей ES5-подобной нотации (но отметьте, что ECMAScript 5 не содержит генераторов):
Для большей информации и примеров смотри method definitions.
Начиная с ECMAScript 2015, синтаксис объявления объектов также поддерживает вычисляемые имена свойств. Это позволяет добавлять в скобки [] выражение, которое будет вычислено, как имя свойства. Это похоже на скобочную нотацию синтаксиса property accessor, которую вы, вероятно, уже использовали, чтобы прочитать и задать свойство. Теперь можно использовать аналогичный способ с литеральными объектами:
Rest/Spread свойство ECMAScript предлагает (stage 3) добавлять spread свойства в литеральную нотацию. Оно копирует собственные перечисляемые свойства из представленного объекта в новый.
Поверхностное копирование (исключая prototype) или слияние объектов теперь возможно с помощью более короткого синтаксиса, чем Object.assign().
Заметьте, что Object.assign() вызывает setters, тогда как оператор spread нет.
Объявление свойства в виде __proto__: value или "__proto__": value не создаст свойства с именем __proto__. Вместо этого, если предоставляемое значение объект или null, оно заменит [[Prototype]] создаваемого объекта на это значение. (Если значение не объект или null, объект не изменится.)
Только одно изменение prototype разрешено через литеральное объявление объекта: несколько изменений prototype вызовут синтаксическую ошибку.
Объявление свойства не через "двоеточие" не изменит значения prototype: это описание будет выглядеть идентично такому же объявлению свойства с использованием любого другого имени.
Литеральная нотация не то же самое, что и JavaScript Object Notation (JSON). Хотя они и выглядят аналогично, существует разница между ними:
| ECMAScript® 2027 Language Specification # sec-object-initializer |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 17 дек. 2024 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.