请解释日期对象类型转换



我刚刚在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是如何工作的

From MDN setHours设置日期并返回从1970年1月1日00:00:00开始的毫秒数。

所以在第一个例子中,x被分配了结果时间戳,它是一个数字。

为了更好地说明,请执行

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

Date.setHours:

[…返回从UTC时间1970年1月1日00:00:00到更新后的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对象,所以这也是预期的行为——看看typeof操作符可能的返回值。

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

相关内容

最新更新