Javascript 请解释日期对象类型转换
我刚刚在SpiderMonkey和V8 javascript引擎中发现了一个奇怪的行为。建议找一个解释对每个人来说都是一个好学校 奇怪的工作代码:Javascript 请解释日期对象类型转换,javascript,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 如果
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如何更好地工作:
[…]返回从1970年1月1日00:00:00 UTC到更新日期实例所表示的时间的毫秒数
在第一个代码段中,x
的值是表示时间戳的数字,因此其类型是number
var x = (new Date()).setHours(24, 0, 0, 0);
typeof x; // "number"
您可以实例化一个日期对象,并对其调用setHours
,返回分配给x
的时间戳
对于第二个代码段:
var x = new Date();
x.setHours(24, 0, 0, 0);
typeof x; // "object"
x
是一个Date
对象,因此这也是预期的行为-请查看
x
是Date
的一个实例,它继承了Date
构造函数的原型,因此x instanceof Date
是true
:
[…]返回从1970年1月1日00:00:00 UTC到更新日期实例所表示的时间的毫秒数
在第一个代码段中,x
的值是表示时间戳的数字,因此其类型是number
var x = (new Date()).setHours(24, 0, 0, 0);
typeof x; // "number"
您可以实例化一个日期对象,并对其调用setHours
,返回分配给x
的时间戳
对于第二个代码段:
var x = new Date();
x.setHours(24, 0, 0, 0);
typeof x; // "object"
x
是一个Date
对象,因此这也是预期的行为-请查看
x
是Date
的一个实例,它继承了Date
构造函数的原型,因此x instanceof Date
是trueFrom setHours设置日期并返回自1970年1月1日00:00以来的毫秒数
因此,在第一个示例中,x被分配了结果时间戳,它是一个数字
为了更好地说明,请
var y = new Date(),
x = y.setHours(24,0,0,0)
typeof x // number
From setHours设置日期并返回自1970年1月1日00:00:00以来的毫秒数
因此,在第一个示例中,x被分配了结果时间戳,它是一个数字
为了更好地说明,请
var y = new Date(),
x = y.setHours(24,0,0,0)
typeof x // number
在第二个代码段的第三行有两次typeof??很肯定还有一个额外的typeof
。在控制台上尝试查看。在第二个代码段的第三行,您有两次typeof,非常确定您有一个额外的typeof
。在控制台上尝试查看.OMG,setHours
更改对象结束返回数。这对我来说是出乎意料的,我有一个令人羞愧的主题:现代IDE为typeof-typeof
生成通知,因此使用IDE是一个很好的做法,当然,双重测试,setHours
更改对象结束返回数。这对我来说是出乎意料的,我有一个令人羞愧的主题:现代IDE为typeof-typeof
生成通知,所以使用IDE是一个很好的做法,当然还有双重测试