嗨,我正在寻找这个简单代码的好解释
为什么isNaN(new Date(some date))
会给false
? (返回对象的类型)
这是一个对象,据我所知isNaN函数显式转换为数字,所以如果我将不同的对象传递给isNaN,则返回true。
答案 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,因为它被转换为数字。
无论你在参数中传递什么,如果成功返回数字,那么它会给你结果为假,否则它会给你真实的。