TypeError: calling a builtin X constructor without new is forbidden

JavaScript 异常“调用内置的 X 构造函数时禁止不使用 new”在尝试不使用 new 关键字调用内置构造函数时发生。所有现代构造函数,例如 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)

错误类型

TypeError

哪里出错了?

在 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();

另见