Spec-Zone.ru › JavaScript

Присваивание (=)

Базовая линия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Оператор присваивания (=) используется для присваивания значения переменной или свойству. Само выражение присваивания имеет значение, которое является присвоенным значением. Это позволяет объединять несколько присваиваний для присваивания одного значения нескольким переменным.

Попробуйте

let x = 2;
const y = 3;

console.log(x);
// Expected output: 2

console.log((x = y + 1)); // 3 + 1
// Expected output: 4

console.log((x = x * y)); // 4 * 3
// Expected output: 12

Синтаксис

x = y

Параметры

x
Допустимая цель присваивания, включая идентификатор или аксессор свойства. Это также может быть шаблон деструктуризации.
y
Выражение, определяющее значение, которое будет присвоено x.

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

Значение y.

Исключения

ReferenceError
Выбрасывается в строгом режиме, если присваивание выполняется идентификатору, который не объявлен в области видимости.
TypeError
Выбрасывается в строгом режиме, если присваивание выполняется свойству, которое не может быть изменено.

Описание

Оператор присваивания полностью отличается от знака равенства (=), используемого в качестве синтаксических разделителей в других местах, таких как:

  • Инициализаторы var, let и const объявлений
  • Значения по умолчанию деструктуризации
  • Параметры по умолчанию
  • Инициализаторы полей класса

Все эти места принимают выражение присваивания в правой части =, поэтому если у вас есть несколько знаков равенства, объединенных вместе:

const x = y = 5;

Это эквивалентно:

const x = (y = 5);

Что означает, что y должна быть предварительно существующей переменной, а x — это вновь объявленная const переменная. y присваивается значение 5, а x инициализируется значением выражения y = 5, которое также является 5. Если y не является предварительно существующей переменной, в нестрогом режиме неявно создается глобальная переменная y, или в строгом режиме выбрасывается ReferenceError. Чтобы объявить две переменные в одном объявлении, используйте:

const x = 5,
  y = 5;

Примеры

Базовое присваивание и цепочки

let x = 5;
let y = 10;
let z = 25;

x = y; // x is 10
x = y = z; // x, y and z are all 25

Значение выражений присваивания

Само выражение присваивания оценивается как значение правой части, поэтому вы можете одновременно вывести значение в консоль и присвоить его переменной.

let x;
console.log(x); // undefined
console.log(x = 2); // 2
console.log(x); // 2

Присваивание неквалифицированному идентификатору

Глобальный объект находится в вершине цепочки областей видимости. При попытке разрешить имя в значение, осуществляется поиск по цепочке областей видимости. Это означает, что свойства глобального объекта удобно доступны из любой области видимости, без необходимости указывать имена с префиксом globalThis., window. или global..

Поскольку глобальный объект имеет свойство String (Object.hasOwn(globalThis, "String")), вы можете использовать следующий код:

function foo() {
  String("s"); // The function `String` is globally available
}

Таким образом, глобальный объект в конечном итоге будет искаться для неквалифицированных идентификаторов. Вам не нужно вводить globalThis.String; вы можете просто ввести неквалифицированный String. Чтобы сделать эту функцию более концептуально последовательной, присваивание неквалифицированным идентификаторам предполагает, что вы хотите создать свойство с таким именем в глобальном объекте (с опущенным globalThis.), если в цепочке областей видимости нет переменной с таким же именем.

foo = "f"; // In non-strict mode, assumes you want to create a property named `foo` on the global object
Object.hasOwn(globalThis, "foo"); // true

В строгом режиме присваивание неквалифицированному идентификатору приведет к ReferenceError, чтобы избежать случайного создания свойств в глобальном объекте.

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

Присваивание с деструктуризацией

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

const result = /(a+)(b+)(c+)/.exec("aaabcc");
let a = "",
  b = "",
  c = "";
[, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"

Дополнительную информацию см. в разделе Деструктуризация.

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-assignment-operators

Совместимость с браузерами

Настольные компьютеры Мобильные Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
assignment
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Операторы присваивания в руководстве по JS
  • Деструктуризация

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API