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

如何判断给定对象是否为动态导入所得的ES6模块?

检测ES6动态导入返回的模块对象的可靠方法

存在可跨运行环境的可靠检测方案,核心依赖ECMAScript规范对模块命名空间对象的标准化定义。

核心检测逻辑

ECMAScript规范明确要求,所有ES模块的命名空间对象(即动态导入返回的Promise resolve后得到的对象)的内置Symbol.toStringTag属性值为固定字符串Module,且该属性不可写、不可枚举、不可配置,常规代码无法伪造该标记。

我们可以通过调用Object.prototype.toString读取该标记,实现可靠检测:

function isESModule(obj) {
  return Object.prototype.toString.call(obj) === '[object Module]'
}

兼容性说明

所有支持ES6动态导入特性的运行环境(Chrome 63+、Firefox 67+、Safari 11.1+、Node.js 13.2+及以上版本)都完全兼容该检测逻辑,不存在误判问题。
该方法也可以直接区分ES模块对象、普通对象、CommonJS导出对象。

避坑提示

不要通过以下方式做检测,可靠性极低:

  • 判断对象是否存在default属性:普通对象可手动添加default属性,极易误判
  • 判断对象原型是否为null:可通过Object.create(null)手动创建原型为null的普通对象,无法准确区分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:30:00