我已经看到以这种方式创建对象:
const obj = new Foo;
但我认为创建对象时括号不是可选的:
const obj = new Foo();
前一种创建对象的方法是否有效并在 ECMAScript 标准中定义?前一种创建对象的方式和后一种方式有什么区别吗?一个比另一个更受欢迎吗?
引用大卫弗拉纳根1:
作为一种特殊情况,new仅对于运算符,JavaScript 通过在函数调用中没有参数时允许省略括号来简化语法。以下是使用运算符的一些示例new: o = new Object; // Optional parenthesis omitted here d = new Date(); ...
作为一种特殊情况,new仅对于运算符,JavaScript 通过在函数调用中没有参数时允许省略括号来简化语法。以下是使用运算符的一些示例new:
new
o = new Object; // Optional parenthesis omitted here d = new Date(); ...
就个人而言,我总是使用括号,即使构造函数不带参数。
此外,如果省略括号, JSLint可能会伤害您的感受。它报告Missing '()' invoking a constructor,并且该工具似乎没有允许括号遗漏的选项。
Missing '()' invoking a constructor
1 David Flanagan:JavaScript 权威指南:第 4 版(第 75 页)