【发布时间】:2019-02-11 03:07:10
【问题描述】:
为什么 JavaScript 在设置(无效)日期时返回“无效日期”?似乎它应该出错/抛出异常并使其难以处理任何错误。
问题:处理此问题的最佳方法是在“更新”后检查日期值以查看该值实际上是日期还是“无效日期”的字符串值?
const validDate = new Date();
console.log('validDate instanceof Date:', validDate instanceof Date);
const invalidDate = new Date('asdfasdfasdf');
console.log('invalidDate instanceof Date:', invalidDate instanceof Date);
if (invalidDate) {
// This hits because invalidDate is now a string and is therefore truthy
console.log('Date is Valid');
}
if (invalidDate instanceof Date) {
// This hits because it's still an instance of date (although the value is a string)
console.log('Date is Valid');
}
if (typeof invalidDate === 'string') {
// Doesnt hit because invalidDate is not a string
}
【问题讨论】:
-
你的
if (invalidDate)测试工作不是因为它是一个字符串,而是因为它是一个实例化的 Date 实例。我的意思是,你自己的代码表明这是真的。 -
如果
new Date(...)没有抛出异常,唯一可能的返回值是某种类型的实例化对象。它不会是一个字符串。 -
似乎
new Date(<any invalid date value>)应该抛出某种类型的异常,而不是仅仅返回“无效日期”。只是看起来有点奇怪......
标签: javascript