Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 请解释日期对象类型转换_Javascript - Fatal编程技术网

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 如果

我刚刚在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如何更好地工作:

[…]返回从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
true

From 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是一个很好的做法,当然还有双重测试