isNaNとNumber.isNaNの違い
ほとんどの人は、 `isNaN`とは何かとその使用方法を知っています。それは「それは数字のように見えるのか、本当に数字なのか」という意味です。指定されたものが「数値ではない」場合はtrueを返します。私はあなたがポイントを得たと思います。さて、これが取引です。 isNaNとNumber.isNaNの違いは何ですか?
説明を始める前に、友人のRafaelに書くように勧めてくれたことに感謝します。
isNaNから始めましょう。これは、どこからでも呼び出すことができるグローバル関数です。実際の動作を見てみましょう:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
これは単純ですが、方向が間違っています。次に例を示します。
isNaNの実装によると、文字列値を数値として扱い、これに基づいて結果を返します。`isNaN( ‘blabla’) `を確認してください。
では、これらの誤解を解決するためにNumber.isNaN静的メソッドにはEcmaScript2015#Number.isNaNが付属しています
何をしているのですか?
私の場合、数値タイプとして2つのパラメーターを受け入れ、ターゲットのスケーリングでアニメーションを実行するメソッドがあります。オブジェクト。どういうわけか、少しリファクタリングを行った後、私は奇妙な振る舞いをしました。はい、私はユニットテストを書くべきでした、恥ずかしいです。とにかく、場合によっては、メソッドはパラメータとして未定義を受け取ります。だから私はそれらをチェックする必要があります。
私はこれを書きました:
私の不注意は私を間違った論理に導きます。 Number.isNaN(undefined)は私にfalseを返すからです。 (古いisNaN(undefined)はtrueを返します)それで私は次のように変更しました:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
それで動作しているようです。しかし、私は起こりうるすべての失敗に気を配りたかったのです。たぶん私は未定義ではなくnullを受け取るかもしれません。 nullを受け取った場合、ロジックは失敗します。なぜですか?
null * null; // 0
null * 8 // 0
あなたはそのことを理解していると思います。そこで、次のようにコードを更新しました。
私の目標は、2つの値が未定義またはnullであることを確認することでした。そして、私の旅はその記事を書き、私の知識を更新することになります。実装は私が知っている派手なものではありませんが、旅は教育的でした。