JavaScript中new后调用构造函数时圆括号不可省略,因为ECMAScript规范要求new Foo()为合法语法,而new Foo是无效语法,会导致解析错误。

JavaScript 中构造函数不能在无参数调用时省略 new 后的圆括号——这是语法错误,不合法。
为什么不能省略圆括号?
因为 new Foo(不带括号)在 JavaScript 中是**无效语法**。ECMAScript 规范明确要求:使用 new 调用构造函数时,若需传参,必须写括号;若无参,括号也**不可省略**,即必须写作 new Foo()。
省略括号会导致解析失败,例如:
new Date → 报错:Uncaught SyntaxError: Unexpected end of input(实际运行中常伴随其他解析异常)
常见误解来源
- 某些内置构造函数(如
Date、Array)在不加new时可被当作普通函数调用(如Date()返回字符串),但这和new语法无关,且行为完全不同; - TypeScript 或 Babel 等工具的宽松提示可能掩盖语法错误,但原生 JS 引擎严格拒绝
new Foo这种写法; - 误将箭头函数或工厂函数的调用方式(如
createFoo())当成构造函数调用。
正确写法与替代方案
- 无参构造函数:必须写
new Foo(); - 想省略括号?改用工厂函数:
function createFoo() { return new Foo(); },然后调用createFoo(); - ES6+ 可结合类和静态方法:
class Foo { static create() { return new Foo(); } },再调用Foo.create(); - 注意:即使使用
Reflect.construct,也仍需传入参数数组(空数组[]),不能省略。
验证方式
直接在浏览器控制台或 Node.js 中尝试以下代码:
new Date() ✅ 正常执行new Date ❌ 语法错误
所有符合标准的 JavaScript 引擎(V8、SpiderMonkey、JavaScriptCore)均遵循此规则。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











