我可以枚举JavaScript模块的导出吗?

时间:2017-10-26 12:38:45

标签: javascript ecmascript-6

在下文中,values中的file-2.js是普通对象吗?

// file-1.js
export {
    FOO,
    BAR
} from '~/my-values';

// file-2.js
import * as values from '~/file-1';

// what is `values` here? an object instance?

我问,因为我想使用类似values.hasOwnProperty('FOO')的内容而rollup引发了以下错误:

'hasOwnProperty' is not exported by 'file-1.js'

附带问题:是否有一种使用导入和导出关键字测试代码的便捷方法?据我所知,Chrome开发工具不支持它们的片段。

2 个答案:

答案 0 :(得分:3)

这些是module namespace exotic objects。它们具有异国情调意味着它们不是完全正常的物体(它们具有不同的内部构件)。

他们的原型链上也没有Object.prototype,因此您无法使用hasOwnProperty,但您应该可以将其与Function.prototype.callFunction.prototype.apply一起使用他们确实有[[ GetOwnProperty ]]

的内部方法
Object.prototype.hasOwnProperty.call(values, 'FOO');

您也可以使用Reflect.has

Reflect.has(values, 'FOO');

此外,由于原型为null,您几乎也可以使用in

'FOO' in values

答案 1 :(得分:0)

让我们说X.js如下:

export const t = 0;
export const t2 = 4;
export default w = -1;
var w3 = -9;

当您从X导入*作为Y时;

基本上你从该文件获得所有导出,然后通过调用具有导出的X.some var来获取它们。 例如:

var t = X.t; // local t will be equal 0.

你无法在没有导出的情况下从X文件中获取变量(因为它们是在本地设置的。

您也可以通过获取所需的值来导入上述代码,例如,

import {t} from X.js
var local_t = t; // local_t is set to 3

导出默认值意味着如果导入文件时不使用const或*,则会获得默认导出值。 例如:

import something from X.js;
var _local = something; //_local equals -1

希望它有所帮助。