javascript为什么isNaN(new Date())为false

kub*_*506 4 javascript function

嗨,我正在为这个简单的代码寻找一个很好的解释

为什么isNaN(new Date(some date))false?(返回对象的类型)

这是一个对象,据我所知isNaN函数显式转换为数字,所以如果我将不同的对象传递给isNaN,则返回true.

Poi*_*nty 14

首先要做的isNaN()是将其参数转换为数字(就像你自己写的那样).如果参数是一个对象,那就是通过调用.valueOf()对象的方法来完成的.对于返回时间戳的Date实例,它不适NaN用于任何有效日期.

试试这个:

alert(isNaN({ valueOf: function() { return 12; } }));
Run Code Online (Sandbox Code Playgroud)

对于无效日期:

alert(isNaN(new Date("potatoes")));
Run Code Online (Sandbox Code Playgroud)

那就是true.如果你想要更严格,isNaN你可以使用Number.isNaN:

alert(Number.isNaN(NaN)); // true
Run Code Online (Sandbox Code Playgroud)

isNaNNumber构造函数的版本不会将其参数强制转换为数字.严格来说,NaN如果你问我(你没有),那就是对意义的歪曲.NaNIEEE浮点的概念不是"不是数字的东西"的一般概念,而是格式中不代表数字的位模式集.