なんでもノート

なんでも書くノートみたいなブログ

Falsyな値の条件式の書き方に迷っている

TypeScriptでの話。特に下記のような値が0の場合の条件式の書き方に迷っている。

const func = (num: number) => {
  if (!num) {
    // numが0の場合、このif文に入る
  }

  if (num === 0) {
    // numが0の場合、このif文にも入る
  }
}

valuenumber型でnullundefinedをとり得ない場面を想定している。後者の方が前者より直感的にわかりやすい条件式だと思う。が、この条件だけだと-0NaNの考慮漏れで思わぬバグを生む可能性がある(今まで-0に出会ったことはないが)。

書きながら、ちゃんと0以外のFalsyな値も考慮しながら実装できた方がいいと思ったので、以下の書き方になりそう。

  • num0の場合とnumが他のFalsyな値の場合の処理が同じ場合、前者の!numだけ書く
  • 処理が異なる場合、num === 0!numの両方書く