-
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 になるためです。
-
参考情報
- http://www.ecma-international.org/ecma-262/5.1/#sec-11.8
( 11.8 Relational Operators ) - http://www.ecma-international.org/ecma-262/5.1/#sec-11.9
( 11.9 Equality Operators )
- http://www.ecma-international.org/ecma-262/5.1/#sec-11.8
(2017-4-20)(2017-4-23)