人には難しい気がする機械の真偽

自分が良く書く JavaScript では、ある値があるかないかを簡素な if 文にして処理を切り分けることがある。何度もハマってしまうから記事に残しておくことにする。タイトルは覚えられていなかった言い訳。

極端にいうと、だいたいこんな感じの JavaScript となる。

var n = 0;

function func() {
  // hoge を huga したりする
};

if (n) {
  func(); // 実行されない
}

n、あるじゃないか! n = 0じゃないか!なんでや!って思ったけど、elseを書いたらそっちが通ったので数値の 0 は JavaScript では偽扱いになるのだということをまた忘れていたことを嘆いた。

判定したいのは n が定義されているか否かであり、if 文では truthy であるか否かになっているため、認知と実装で齟齬が発生した。if 文を書き直すとこうだろうか。

var n = 0;

function func() {
  // hoge を huga したりする
};

if (n !== undefined) {
  func(); // 変数 n が定義されているので実行される
}

n !== undefined として、存在確認で判定すべきだった。

明日からまたよろしくお願いいたします。