请解释日期对象类型转换

时间:2013-04-03 15:44:11

标签: javascript

我刚在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如何更好的原因

2 个答案:

答案 0 :(得分:2)

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

因此,在第一个示例中,x被赋予结果时间戳,这是一个数字。

为了更好地说明,请执行

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

typeof x // number

答案 1 :(得分: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"

xDate对象,因此这也是预期的行为 - 请查看typeof operator的可能返回值。

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