我刚在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如何更好的原因
答案 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)
[...]返回自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
对象,因此这也是预期的行为 - 请查看typeof
operator的可能返回值。
x
是Date
的一个实例,它继承了Date
构造函数的原型,因此x instanceof Date
为true
。