字面量更常用、更安全,构造函数仅在需动态生成或继承时才值得用;日常开发中绝大多数对象应使用字面量{}创建,因其语义清晰、性能好、不污染全局且兼容JSON和类型推导。

字面量更常用、更安全,构造函数只在需要动态生成或继承场景下才值得用。
字面量创建对象最简单也最不容易出错
日常开发中绝大多数对象都该用字面量 {} 创建。它语义清晰、性能好、不会意外污染全局,而且能被静态分析工具准确识别。
- 直接写
const user = { name: "Alice", age: 30 };,没有隐式调用、没有原型链干扰 - JSON 兼容:字面量天然可序列化,
JSON.stringify(user)不会报错 - ESLint 和 TypeScript 都能更好推导类型,比如
user.name的类型是string而非any - 避免了
new Object()这种冗余写法——它和字面量功能完全一样,但多敲三个字符还容易让人误以为有特殊行为
构造函数只在明确需要 new 行为时才用
用 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 { name: "test" }; // SyntaxError
构造函数的“必要性”常被高估。多数时候你想要的是数据容器,不是实例化流程——字面量就是为此而生的。只有当你明确要控制 prototype、需要 instanceof 判断、或封装初始化逻辑时,才该跨出那一步。











