isNaN()とNumber.isNaN()の挙動は微妙に違う
数値変換不可能な文字列を渡したり,BigIntを渡したりすると結果が変わる
code:javascript
isNaN('test-str'); // => true
Number.isNaN('test-str'); // => false
isNaN(12345n); // => Uncaught TypeError: Cannot convert a BigInt value to a number
Number.isNaN(12345n); // => false
違い
isNaN()は,引数がNaNだったり,数値変換してNaNになる時にtrueを返す
変換は単項の+演算子で行われるっぽい
isNaN()の引数にBigIntを渡すとTypeErrorを吐くので
数値に変換出来ない値を数値変換するとNaNが返ってくる
code:javascript
isNaN(NaN); // => true
isNaN('test-str') // => true
isNaN('1') // => false
isNaN(1); // => false
isNaN(true); // => false
isNaN(false); // => false
isNaN(12345n); // => Uncaught TypeError: Cannot convert a BigInt value to a number
Number.isNaN()は引数がNaNだった時にtrueを返す
こっちは特に変換などを試みない
なのでBigIntを渡してもTypeErrorを吐かない
code:javascript
Number.isNaN(NaN); // => true
Number.isNaN('test-str') // => false
Number.isNaN('1') // => false
Number.isNaN(1); // => false
Number.isNaN(true); // => false
Number.isNaN(false); // => false
Number.isNaN(12345n); // => false