You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript构造函数使用new调用时能否返回原始类型值?

结论

在符合ECMAScript标准的JavaScript实现中,不存在可以通过new语义调用返回原始值的构造函数,你观察到的TypeScript允许声明new () => string这类构造函数类型,属于TypeScript类型系统的设计特性,和实际JavaScript运行时的行为没有对应关系。

根据ECMAScript规范对构造函数[[Construct]]内部方法的要求,构造调用的返回值必须是对象类型,你测试的三类场景已经覆盖了所有可能的构造函数实现路径,没有其他可实现的方案:

  • 内置构造函数:Number/String/Boolean等内置类型的new调用固定返回包装对象,只有作为普通函数调用时才返回原始值
  • 自定义构造函数:构造函数内的return语句只有返回对象时才会覆盖默认生成的this实例,返回原始值会被直接忽略,最终还是返回实例对象
  • Proxy的construct陷阱:规范明确要求陷阱的返回值必须是对象,返回原始值会直接抛出TypeError

TypeScript允许这类声明的原因

TypeScript采用结构化类型系统,在设计构造函数类型语法时,没有对返回值做必须为对象的强制约束,和普通函数类型的声明规则保持了统一。这类声明仅用于类型层面的标注、类型体操等场景,不存在实际能匹配该类型的JavaScript运行时值。


内容的提问来源于stack exchange,提问作者GOTO 0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:06:00