Присваивание (=)
Базовая линия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 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"
Дополнительную информацию см. в разделе Деструктуризация.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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