Why would you invoke new Date without parentheses?
我刚刚在Gmail中打开开发工具时看到了这个片段:
1 | var GM_TIMING_END_CHUNK1=(new Date).getTime(); |
我通常会期待这样的事情,因为调用没有括号的构造函数是相当罕见的(至少我从未见过它直到现在):
1 | var GM_TIMING_END_CHUNK1=new Date().getTime(); |
要么
1 | var GM_TIMING_END_CHUNK1=Date.now(); //newer browsers |
这样做有什么好处,行为有什么不同吗? 这是完全相同的字符数量,所以简洁不是一个原因。
如果不传递任何参数,您可以在JS中调用带有括号的JS中的构造函数,效果是相同的。
但是,当您想在结果对象上调用方法时,它会有所不同:
这样首先评估表达式,并在结果上调用
除了关于可选括号的现有注释 - 即
作为一种风格问题,我更喜欢包括所有可选的parens以保持一致性和清晰度:
1 | (new Date()).getTime() |
当函数用作对象构造函数并且没有传递参数时,括号是可选的。
两个语句没有区别,括号是可选的,所以通常程序员放弃它。
在你的第二个例子中:
1 | new Date().getTime(); |
优秀实践程序员之一遵循在调用函数或属性之前将对象括在括号中。所以它将是:
1 | (new Date()).getTime(); |
如上所述,对象括号是可选的。所以更简洁的清洁代码是:
1 | (new Date).getTime(); |
你可能想看看这个答案:
使用"new"运算符创建对象时,我们可以省略括号吗?
基本上