Skip to content

Instantly share code, notes, and snippets.

@Hamayama
Last active April 23, 2017 08:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hamayama/bebdb6b8b06fc8ef9c1ba9db009f9ae6 to your computer and use it in GitHub Desktop.
Save Hamayama/bebdb6b8b06fc8ef9c1ba9db009f9ae6 to your computer and use it in GitHub Desktop.
JavaScript で NaN と if 文の条件式について

JavaScript で NaN と if 文の条件式について

  • JavaScript で NaN を大小比較に使用すると、結果が常に false になります。
    このため、変数の内容に NaN がありえる状況では、
    if 文の条件式を書き換えると 結果が変わってくるケースがあります。

  • 例えば、

    if (x < 0 || x > 10) { y = 1; } else { y = 2; }
    

    を以下のように書き換えると、一見同じ条件のようですが、

    if (!(x >= 0 && x <= 10)) { y = 1; } else { y = 2; }
    

    x = NaN を入力した場合に、前者は y = 2 となり、後者は y = 1 となります。

  • このことから、エラーチェック等で if 文を使用する場合には、より安全な方を選択することがあります。

    // x = NaN の場合もエラーにできる
    if (!(x >= 0 && x <= 10)) { alert("エラー。数値が範囲外です。"); }
    

  • ただし、等価/不等価演算子に関しては、例えば、

    if (x != 3) { y = 1; } else { y = 2; }
    

    を以下のように書き換えても、

    if (!(x == 3)) { y = 1; } else { y = 2; }
    

    x = NaN を入力した場合に、どちらも y = 1 となります。
    これは NaN を不等価演算子に使用した場合には、結果が true になるためです。

  • 参考情報

(2017-4-20)(2017-4-23)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment