0

我刚刚在 SpiderMonkey 和 V8 javascript 引擎中发现了一个奇怪的行为。建议找到解释对每个人来说都是一所好学校

奇怪的工作代码:

 var x = (new Date()).setHours(24, 0, 0, 0);
 typeof x; // "number"

按预期工作的代码:

var x = new Date(); 
x.setHours(24, 0, 0, 0);
typeof x; // "object"
x instanceof Date; // true

如果我们找到原因,我们将了解 JavaScript 如何更好地工作

4

2 回答 2

2

MDN setHours 设置日期并返回自 1970 年 1 月 1 日 00:00:00 以来的毫秒数。

因此,在第一个示例中,x 被分配了结果时间戳,它是一个数字。

为了更好地说明,做

var y = new Date(),
    x = y.setHours(24,0,0,0)

typeof x // number
于 2013-04-03T15:52:26.557 回答
1

Date.setHours

[...] 返回自 1970 年 1 月 1 日 00:00:00 UTC 到更新的 Date 实例表示的时间的毫秒数。

在第一个片段中,x的值是一个表示时间戳的数字,因此它的类型是number

var x = (new Date()).setHours(24, 0, 0, 0);
typeof x; // "number"

您实例化一个 Date 对象并调用setHours它返回分配给的时间戳x


对于第二个片段:

var x = new Date(); 
x.setHours(24, 0, 0, 0);
typeof x; // "object"

x是一个Date对象,所以这也是预期的行为 - 看看typeofoperator的可能返回值。

x是 的一个实例Date,它继承了Date构造函数的原型,因此x instanceof Datetrue

于 2013-04-03T15:50:22.777 回答