Spec-Zone.ru › JavaScript

SyntaxError: недопустимая левая часть присваивания

Исключение JavaScript "invalid assignment left-hand side" (недопустимая левая часть присваивания) возникает, когда где-то произошло неожиданное присваивание. Оно может быть вызвано использованием одиночного знака = вместо == или ===.

Сообщение

SyntaxError: Invalid left-hand side in assignment (V8-based)
SyntaxError: invalid assignment left-hand side (Firefox)
SyntaxError: Left side of assignment is not a reference. (Safari)

ReferenceError: Invalid left-hand side in assignment (V8-based)
ReferenceError: cannot assign to function call (Firefox)
ReferenceError: Left side of assignment is not a reference. (Safari)

Тип ошибки

SyntaxError или ReferenceError, в зависимости от синтаксиса.

Что пошло не так?

Произошло неожиданное присваивание. Это может быть связано с несоответствием между оператором присваивания и оператором сравнения, например. В то время как одиночный знак = присваивает значение переменной, операторы == или === сравнивают значение.

Примеры

Типичные недопустимые присваивания

if (Math.PI + 1 = 3 || Math.PI + 1 = 4) {
  console.log("no way!");
}
// SyntaxError: invalid assignment left-hand side

const str = "Hello, "
+= "is it me "
+= "you're looking for?";
// SyntaxError: invalid assignment left-hand side

В операторе if вы хотите использовать оператор сравнения (===), а для конкатенации строк необходим оператор плюс (+).

if (Math.PI + 1 === 3 || Math.PI + 1 === 4) {
  console.log("no way!");
}

const str = "Hello, "
  + "from the "
  + "other side!";

Присваивания, приводящие к ReferenceErrors

Недопустимые присваивания не всегда приводят к ошибкам синтаксиса. Иногда синтаксис почти правильный, но во время выполнения левая часть выражения вычисляется как значение, а не ссылка, поэтому присваивание все равно недопустимо. Такие ошибки возникают позже, во время выполнения оператора.

function foo() {
  return { a: 1 };
}
foo() = 1; // ReferenceError: invalid assignment left-hand side

Вызовы функций, вызовы new, super() и this — все это значения, а не ссылки. Если вы хотите использовать их в левой части, целевой объект присваивания должен быть свойством их полученных значений.

function foo() {
  return { a: 1 };
}
foo().a = 1;

Примечание: В Firefox и Safari первый пример генерирует ReferenceError в нестрогом режиме и SyntaxError в строгом режиме. Chrome выдает ReferenceError во время выполнения как для строгого, так и для нестрогого режимов.

Использование опциональной цепочки в качестве цели присваивания

Опциональная цепочка (Optional chaining) не является допустимой целью присваивания.

obj?.foo = 1; // SyntaxError: invalid assignment left-hand side

Вместо этого вам придется сначала проверить нулевой случай.

if (obj) {
  obj.foo = 1;
}

См. также

  • Операторы присваивания
  • Операторы сравнения

© 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/Errors/Invalid_assignment_left-hand_side

Spec-Zone.ru

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