Javascript 命名导出与导出对象

Javascript 命名导出与导出对象,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么这样做有效: const str = 'stuff'; export { str }; 但不是这个: export default { str: 'stuff' }; 我想按以下方式导入它: import { str } from 'myLib'; 我希望直接在导出中赋值,而不需要事先创建变量 当我尝试时: export { str: 'stuff' }; 我得到一个错误: SyntaxError: /home/karlm/dev/project/ex.js: Unex

为什么这样做有效:

const str = 'stuff';
export {
  str
};
但不是这个:

export default {
  str: 'stuff'
};
我想按以下方式导入它:

import { str } from 'myLib';
我希望直接在导出中赋值,而不需要事先创建变量

当我尝试时:

export {
  str: 'stuff'
};
我得到一个错误:

SyntaxError: /home/karlm/dev/project/ex.js: Unexpected token, expected , (41:5)
  39 | 
  40 | export {
> 41 |   str: 'stuff'
     |      ^
  42 | };
  43 | 
的主要原因是用于从给定文件(或模块)导出函数、对象或基本体

但是您需要一个标识符才能导出(这样就可以通过另一个脚本中的
import
导入它)

您可以简单地执行以下操作:

export const obj = {
  str: 'stuff'
};
在过程中,您将能够使用相同的名称
obj
来引用相应的值

然后像这样导入它:

import { obj } from 'myLib';

ES6中有两种导出样式——命名导出和默认导出。使用以下语法导出命名导出:

export const str = 'stuff';
// or
const str = 'stuff';
export { str };
const obj = { str: 'stuff' };
export default obj;
// or 
export default {
  str: 'stuff'
};
默认导出如下所示:

export const str = 'stuff';
// or
const str = 'stuff';
export { str };
const obj = { str: 'stuff' };
export default obj;
// or 
export default {
  str: 'stuff'
};
导入时会显示差异。对于第一个,您需要包括大括号:

import { str } from 'myModule'; // 'stuff', from the first example
如果没有大括号,它将导入默认导出:

import myModule from 'myModule'; //  {str: 'stuff'}, from the second example

更新了关于第一部分的问题,我有一个错误。对不起,我的错。已编辑。实际上,您不能默认导出变量声明<代码>导出默认常量str='stuff'无效。完全错误。没有正常的出口。这两种类型都是正常的。它是默认导出或命名导出。此外,正如@Qwerty所注意到的,您不能默认导出声明。导出语法就是这样工作的。它看起来像是对象分解,我想这就是为什么您希望能够导出对象,但这两个概念根本不同。相关阅读:类相关:也相关: