TypeError: 在没有 new 的情况下调用内置 X 构造函数是被禁止的

当您尝试在不使用 new 关键字的情况下调用内置构造函数时,会发生 JavaScript 异常 "calling a builtin X constructor without new is forbidden"。所有现代构造函数,例如 PromiseMap,必须使用 new 调用。

消息

TypeError: Constructor X requires 'new' (V8-based)
TypeError: Promise constructor cannot be invoked without 'new' (V8-based)
TypeError: calling a builtin X constructor without new is forbidden (Firefox)
TypeError: calling X constructor without new is invalid (Safari)

错误类型

哪里出错了?

在 JavaScript 中,调用一个函数而不使用 new构造一个函数使用 new 是两个不同的操作,函数的行为可能因其调用的方式而异。

除了以下传统构造函数之外,所有现代构造函数都必须使用 new 调用

其他一些构造函数,例如 Date(),以及基本包装器,例如 String()Number()Boolean(),也可以使用或不使用 new 调用,但两种情况下返回类型不同。

在每个构造函数页面上,您都可以找到有关构造函数是否必须使用 new 调用 的信息。

示例

无效情况

js
const m = Map(); // TypeError: calling a builtin Map constructor without new is forbidden

有效情况

js
const m = new Map();

另请参见