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