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

时间:2014-09-06 16:46:09

标签: javascript function

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

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

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

2 个答案:

答案 0 :(得分:13)

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

试试这个:

alert(isNaN({ valueOf: function() { return 12; } }));

对于无效日期:

alert(isNaN(new Date("potatoes")));

那将是true。如果您想要更严格的isNaN,可以使用Number.isNaN

alert(Number.isNaN(NaN)); // true

Number构造函数上的isNaN版本不会将其参数强制转换为数字;它的工作是说你传入的东西是NaN值,没有任何类型转换。因此,通过该功能,只有一个NaN

答案 1 :(得分:1)

使用isNaN进行检查会尝试将其参数转换为数字,如果这不是数字,则只有结果为true。但是如果日期作为参数传递,它会显示为false,因为它被转换为数字。

无论你在参数中传递什么,如果成功返回数字,那么它会给你结果为假,否则它会给你真实的。