为什么新的Date(未定义)创建了无效的日期,但新的Date(null)却没有?

luc*_*svw 5 javascript

今天我用Javascript发现了一些奇怪的事:

console.log(new Date(null)); // 1970-01-01T00:00:00.000Z
console.log(new Date(undefined)); // Invalid Date
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我知道null和undefined不一样,但在这种情况下我会期望相同的结果.

Ber*_*rgi 6

如果new Date使用不是字符串的单个基本参数调用它,则会将其强制转换为数字.虽然null会强迫0,undefined将成为NaN,而这是你回来的日期的内在价值.

console.log(null + ":")
console.log(Number(null))
console.log(new Date(null).valueOf())
console.log(new Date(null).toString())
console.log(undefined + ":")
console.log(Number(undefined))
console.log(new Date(undefined).valueOf())
console.log(new Date(undefined).toString())
Run Code Online (Sandbox Code Playgroud)