Что означает ошибка ReferenceError: Invalid left-hand side in assignment

Ситу­а­ция: вы пише­те код, кото­рый обра­ба­ты­ва­ет нажа­тия на кла­ви­ши для управ­ле­ния в игре. Вы вспо­ми­на­е­те, что нуж­но сде­лать отдель­ную функ­цию для про­вер­ки на попа­да­ние в цель. Для это­го вы хоти­те срав­нить теку­щие коор­ди­на­ты с коор­ди­на­та­ми цели — если они сов­па­да­ют, то есть попа­да­ние. В резуль­та­те полу­ча­ет­ся такой код:

function collision () {

    if(x = target.x && y = target.y) {

        alert("Столкновение!");

    }

};

Но при запус­ке игра пада­ет с ошибкой:

❌ ReferenceError: Invalid left-hand side in assignment

Что слу­чи­лось: бра­у­зер видит услов­ный опе­ра­тор if и хочет выпол­нить срав­не­ния в скоб­ках. Если равен­ство выпол­ня­ет­ся, то усло­вие истин­но и мож­но выпол­нить коман­ду выво­да на экран. Но вме­сто срав­не­ния бра­у­зер встре­ча­ет опе­ра­тор при­сва­и­ва­ния, пони­ма­ет, что ему тут не место, и оста­нав­ли­ва­ет программу.

Что­бы ошиб­ки не было, нуж­но исполь­зо­вать не один знак равен­ства, а два. Один — при­сва­и­ва­ние, два — сравнение:

function collision () {

    if(x == target.x && y == target.y) {

        alert("Столкновение!");

    }

};

Когда встре­ча­ет­ся: когда мы дела­ем что-то не то с левой частью выра­же­ния — при­сва­и­ва­ем вме­сто срав­не­ния или пере­на­прав­ля­ем вывод в пере­мен­ную, кото­рая не пред­на­зна­че­на для тако­го. Ещё такая ошиб­ка быва­ет, когда что-то пыта­ют­ся при­сво­ить клю­че­во­му сло­ву this — оно хоть и похо­же на пере­мен­ную по пове­де­нию, но при­сва­и­вать ему новое зна­че­ние так нельзя.

Как исправить ошибку ReferenceError: Invalid left-hand side in assignment

Ско­рее все­го, вы исполь­зу­е­те при­сва­и­ва­ние вме­сто срав­не­ния. Это частая ошиб­ка у нович­ков, пото­му что в мате­ма­ти­ке знак «=» озна­ча­ет имен­но равенство.

Если дело не в этом, то вот вопро­сы, кото­рые помо­гут вам с поис­ком ошибки:

  • мож­но ли вооб­ще делать с этой пере­мен­ной то, что вы делаете;
  • нужен ли отдель­ный модуль или ком­по­нент для выпол­не­ния этой коман­ды и под­клю­чён ли он;
  • пра­виль­но ли вы исполь­зу­е­те эту коман­ду или опе­ра­тор — на вся­кий слу­чай уточ­ни­те и загля­ни­те в справочник.

Попробуйте сами

if (Math.PI = 3 || Math.PI = 4) { 
  console.log('Потрачено!');
}
var str = 'Привет, '
+= 'это журнал '
+= 'Код!';

Зада­ние со звёз­доч­кой: есть такой фраг­мент кода на странице

<input type="text" id="number"><br>

Enter exponent:<br>

<input type="text" id="degree"><br><br><br>

<button id="button">Result</button>

<input type="text" id="result">

И есть такой скрипт, кото­рый при нажа­тии на кноп­ку пада­ет с нашей ошибкой:

var button = document.getElementById('button');
button.addEventListener('click', math);
 
function math(a,b){
    var a = document.getElementById('number').value;
    var b = document.getElementById('degree').value;
    var result = Math.pow(a,b);
    document.getElementById('result') = result;
}

Текст:
Миха­ил Полянин

Редак­тор:
Мак­сим Ильяхов

Худож­ник:
Даня Бер­ков­ский

Кор­рек­тор:
Ири­на Михеева

Вёрст­ка:
Мария Дро­но­ва

Соц­се­ти:
Олег Веш­кур­цев