SyntaxError: test for equality (==) mistyped as assignment (=)?

JavaScript の警告 "test for equality (==) mistyped as assignment (=)?" は、代入 (=) が通常は等価性 (==) の検査をすべき場面にあった場合に発生します。

エラーメッセージ

js
Warning: SyntaxError: test for equality (==) mistyped as assignment (=)?

エラータイプ

(Firefox のみ) SyntaxError の警告であり、 javascript.options.strict の設定が true に設定されていた場合に発生します。

何がうまくいかなかったのか?

代入 (=) が通常は等価性 (==) の検査をすべき場面にあった場合に発生します。デバッグを行いやすくするために、 JavaScript は (厳密な警告が有効な場合は) このパターンについて警告を出します。

条件式内での代入

(if...else のような) 条件式内では、単純な代入を行わないことをお勧めします。コードを一目見たときに、代入は等価と混同しやすいからです。たとえば、以下のコードは使用しないでください。

js
if (x = y) {
  // 正しいことを実行する
}

条件式内で代入を行う必要がある場合、一般的には次のように、代入の周りに追加の括弧を置きます。

js
if ((x = y)) {
  // 正しいことを実行する
}

または、本当は比較演算子 (===== など) を使用しようとしたのかもしれません。

js
if (x == y) {
  // 正しいことを実行する
}

関連項目