字面量更常用、更安全,构造函数仅在需动态生成或继承时才值得用;日常开发中绝大多数对象应使用字面量{}创建,因其语义清晰、性能好、不污染全局且兼容JSON和类型推导。
字面量更常用、更安全,构造函数只在需要动态生成或继承场景下才值得用。
日常开发中绝大多数对象都该用字面量 {} 创建。它语义清晰、性能好、不会意外污染全局,而且能被静态分析工具准确识别。
const user = { name: "Alice", age: 30 };,没有隐式调用、没有原型链干扰JSON.stringify(user) 不会报错user.name 的类型是 string 而非 any
new Object() 这种冗余写法——它和字面量功能完全一样,但多敲三个字符还容易让人误以为有特殊行为用 new Object() 或 new Array() 等原生构造函数,本质是绕过语法糖去触发内部初始化逻辑。但 JavaScript 引擎对字面量做了大量优化,构造函数反而可能失去这些优化。
new Object({ a: 1 }) 和 { a: 1 } 结果相同,但前者多一次函数调用开销new Object() 创建空对象时,其 constructor 指向 Object;而字面量 {} 也指向 Object,行为一致,无差异class User)或需要绑定特定原型(如 Object.create(proto)),而不是替代 {}
有人误写 const obj = new { a: 1 }; 或 const arr = new [1, 2, 3];,这会直接抛出 SyntaxError: Unexpected token '{' 或 TypeError: Array is not a constructor。因为花括号和方括号是字面量语法,不是可实例化的函数名。
new { x: 1 }、new [1,2]、new /abc/
{ x: 1 }、[1,2]、/abc/(字面量)new Date()、new RegExp("a")(明确设计为构造函数的内置类型)const good = { name: "test" };
const alsoGood = new Object(); // 语义弱,不推荐,但合法
const bad = new { na
me: "test" }; // SyntaxError
构造函数的“必要性”常被高估。多数时候你想要的是数据容器,不是实例化流程——字面量就是为此而生的。只有当你明确要控制 prototype、需要 instanceof 判断、或封装初始化逻辑时,才该跨出那一步。