Skip to content

Instantly share code, notes, and snippets.

@Hamayama

Hamayama/1008_if_nan.md

Last active Apr 23, 2017
Embed
What would you like to do?
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
You can’t perform that action at this time.