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的实例.
除了关于可选括号的现有注释 - 即new Date() <==> new Date- 注意这Date.now也是一种静态方法.也就是说,没有Date对象被实例化.该方法是Date构造函数本身的属性.这样,它与其他两个例子不同.
作为一种风格问题,我更喜欢包括所有可选的parens以保持一致性和清晰度:
(new Date()).getTime()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |