你为什么要在没有括号的情况下调用新的日期?

m90*_*m90 16 javascript datetime constructor

我刚刚在Gmail中打开开发工具时看到了这个片段:

var GM_TIMING_END_CHUNK1=(new Date).getTime();
Run Code Online (Sandbox Code Playgroud)

我通常会期待这样的事情,因为调用没有括号的构造函数是相当罕见的(至少我从未见过它直到现在):

var GM_TIMING_END_CHUNK1=new Date().getTime();
Run Code Online (Sandbox Code Playgroud)

要么

var GM_TIMING_END_CHUNK1=Date.now(); //newer browsers
Run Code Online (Sandbox Code Playgroud)

这样做有什么好处,行为有什么不同吗?这是完全相同的字符数量,所以简洁不是一个原因.

mar*_*ful 20

如果不传递任何参数,您可以在JS中调用带有括号的JS中的构造函数,效果是相同的.

new Date()vs new Date相同.

但是,当您想在结果对象上调用方法时,它会有所不同:

new Date().getTime()虽然工作但new Date.getTime()不会,因为在后一种情况下,解释器假设getTime是一个Date 类型的方法,但这不是真的,getTime是一个实例方法 - 只存在于构造的对象中.为了克服这个问题,你可以在构造函数调用周围包括括号,告诉解释器它是一个表达式:

(new Date).getTime()

这样,首先计算表达式,并getTime在结果上调用,该结果是Date的实例.


Way*_*ett 5

除了关于可选括号的现有注释 - 即new Date() <==> new Date- 注意这Date.now也是一种静态方法.也就是说,没有Date对象被实例化.该方法是Date构造函数本身的属性.这样,它与其他两个例子不同.

作为一种风格问题,我更喜欢包括所有可选的parens以保持一致性和清晰度:

(new Date()).getTime()
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1686 次

最近记录:

11 年,11 月 前