测试对象是否是 es6 模块

phi*_*ipp 7 javascript predicate ecmascript-6 es6-modules

使用这样的动态导入:

\n
const i = import('./path/to/module.js');\n
Run Code Online (Sandbox Code Playgroud)\n

为该模块生成一个 Promise。假如说./path/to/module.js看起来像这样:

\n
export function foo () {}\nexport function bar () {}\nexport default function () {}\n
Run Code Online (Sandbox Code Playgroud)\n

生成的对象将具有这样的形状:

\n
{\n  foo: \xe2\x80\xa6\n  bar: \xe2\x80\xa6\n  default: \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n

现在我需要弄清楚给定的对象是否是这样的模块,或者任何其他模块。那么:是否有任何测试来确定给定对象是否是通过动态导入获得的 es6 模块?

\n

dvv*_*dvv 4

您应该检查Symbol.toStringTag您所谓的模块对象的属性:

const isModule = i[Symbol.toStringTag] == 'Module'
Run Code Online (Sandbox Code Playgroud)

请参阅Symbol.toStringTag的文档