もともとJavaScriptのニュースレターの滴りに掲載されていました。
JavaScriptでは、特別な値NaN
(”not a number”を意味する)は、意味のある数値として表すことができない数学的計算の結果を表すために使用されます。, たとえば、
NaN
parseInt
またはparseFloat
を使用して文字列から数値を抽出する場合、次の例のようになります。
その結果、javascript開発者は結果変数をテストして、NaN
が含まれているかどうか、または代わりに意味のある値であるかどうかを 値がNaN
であるかどうかを確認するには、いくつかの異なる方法がありますが、残念ながらそれらのほとんどは信頼できません。, それらのいくつかを歩いて、どのように失敗するかを見てみましょう。
論理的なことは、結果がNaN
と等しいかどうかを確認することです。
ここで何が起こっていますか? JavaScriptでは、NaN
は、それ自体と等しくない唯一の値であるという区別があります。 つまり、値がNaN
NaN
と等しいことをチェックすることで、答えは常にnoになるため、値がNaN
かどうかを調べることができません。
他に何を試すことができますか? 組み込みのisNaN
関数はどうですか?,
素晴らしい! これはうまくいくようです。 そして実際には、いくつかの状況下で動作しません。 ただし、名前にもかかわらず、isNaN
関数の目的は、値がNaN
かどうかをチェックすることではありません。 代わりに、目的は、値を数値に強制変換できないかどうかを確認することです。 このため、誤検知が返される可能性があります。, 次のことを考えてみましょう。
数値またはNaN
のみを扱うことが確実でない限り、isNaN
関数はこの目的にはかなり適していません。しかし、ECMAScript6は、値がNaN
かどうかをチェックする特定の目的のために新しい関数を作成することがわかりました。 紛らわしいことに、この関数はisNaN
とも呼ばれますが、グローバルオブジェクトに直接ではなくNumber
オブジェクトにアタッチされます。, これは次のように使用できます:
優れています! 私たちは本当にうまくいく方法を手に入れました。 残念ながら、Number.isNaN
はFireFoxとChromeの新しいバージョンでのみ利用可能であり、IEや他の主要なブラウザではまだサポートされていません。 これは将来的には実行可能なアプローチかもしれませんが、今のところは非常に狭い状況でのみ使用できます。
代わりにNaN
“のタイプを確認できますか?
はい、あなたはそれを正しく読んでいます。, JavaScriptでは、値NaN
のタイプはnumber
です。 それは非常に役に立つつもりはありません。
それでは、正しく動作するだけでなく、クロスブラウザでも利用可能なものを得るために何ができますか? 私がNaN
それ自体と等しくないJavaScriptの唯一の値であることをどのように言及したかを覚えておいてくださいか? 私たちはその事実を利用することができます。現在、値がNaN
であるかどうかをチェックする最良の方法は、それがそれ自身と等しくないかどうかをチェックすることです。 もしそうなら、あなたはそれがNaN
であることを知っています。,
もちろん、この手法を使用することは特に読みやすいものではないため、意図をより明確に伝えるユーティリティメソッドにラップするのが一般的です。
アンダースコアとLo-Dashはどちらも実装を提供します。これがNaN
の癖をよりよく理解するのに役立ったことを願っています。
読んでくれてありがとう!
ジョシュ-クラントン