の滴りJavaScriptでのNaNのテストに関する問題

もともとJavaScriptのニュースレターの滴りに掲載されていました。

JavaScriptでは、特別な値NaN(”not a number”を意味する)は、意味のある数値として表すことができない数学的計算の結果を表すために使用されます。, たとえば、

NaNparseIntまたはparseFloatを使用して文字列から数値を抽出する場合、次の例のようになります。

その結果、javascript開発者は結果変数をテストして、NaNが含まれているかどうか、または代わりに意味のある値であるかどうかを 値がNaNであるかどうかを確認するには、いくつかの異なる方法がありますが、残念ながらそれらのほとんどは信頼できません。, それらのいくつかを歩いて、どのように失敗するかを見てみましょう。

論理的なことは、結果がNaNと等しいかどうかを確認することです。

ここで何が起こっていますか? JavaScriptでは、NaNは、それ自体と等しくない唯一の値であるという区別があります。 つまり、値がNaNNaNと等しいことをチェックすることで、答えは常に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の癖をよりよく理解するのに役立ったことを願っています。

読んでくれてありがとう!

ジョシュ-クラントン

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です