Help us understand the problem. What is going on with this article?

[JavaScript] if文の条件で代入をしてはいけない

JavaScriptのif文条件には truthy または falsy と認識される式が書けます。1
そして条件の中で変数に値を代入することもできます。

代入の例
if (a = 'a') { // 結果、'a'(truthy)が評価される
  console.log(a); // a
}

if (a = '') { // 結果、空文字(falsy)が評価される
} else {
  console.log(a); // ''
}

さらに、こんなこともできます。

複数代入の例
if (a = 'a', b = 'b', a === 'b') {
  console.log('true');
} else {
  console.log('false'); // こっちに入る 
}

// 複数の代入もできている
console.log(a); // a
console.log(b); // b

abに代入を行なった上で、a === 'b'の評価をしています。

これはいつ使うの?

基本的に使いません。
この書き方は悪い習慣とされています。

理由

その1

比較演算子のタイプミスかどうかがわかりにくい。
もし、代入を行う際は以下のように括弧を記述することを推奨されています。

if ((a = 'a')) {}

その2

ほとんどの場合においてわかりにくい。

if ((res = myFunc())) {
  console.log(res);
}

// あえてif文で代入する必要がない
res = myFunc();
if (res) {
  console.log(res);
}

その3

スコープがわかりにくい。

if ((a = 'a')) {
  console.log(a); // a
}
console.log(a); // a

便利な場面を 無理やり 見出してみた

特定の処理だけをスキップする時に使う。

let res = null;
let err = null;
if (({res, err} = myService()), err != null) {
  throw err;
}

function myService() {
  // 何かの処理の結果
  return { res: {}, err: {name: 'hogeErr'}}
}

うーん、、Goっぽくもない気がしますが、、
やっぱり嬉しい場面がないですね、、

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした