模块的默认值
模块语法确实为从模块中导出或导入默认值进行了优化,而这一模式在其他模块系统中非常普遍,例如在 CommonJS (在浏览器之外运行 JS 的另一种模块规范)中。模块的默认值(default value)是使用 default 关键字所指定的单个变量、 函数或类,而你在每个模块中只能设置一个默认导出,将 default 关键字用于多个导出会是语法错误。
导出默认值
以下是使用 default 关键字的一个简单例子:
export default function(num1, num2) {
return num1 + num2;
}
此模块将一个函数作为默认值进行了导出,default 关键字标明了这是一个默认导出。此函数并不需要有名称,因为它就代表这个模块自身。
你也能在 export default 后面放置一个标识符,以指定默认的导出,正如:
function sum(num1, num2) {
return num1 + num2;
}
export default sum;
此处 sum() 函数先被定义了,随后它作为模块的默认值被导出。若默认值需要计算才能得出,你或许会选择这种方式。
将标识符作为默认导出来指定的第三种方式,是使用重命名语法,如下:
function sum(num1, num2) {
return num1 + num2;
}
export { sum as default };
default 标识符有特别含义,既作为重命名导出,又标明了模块需要使用的默认值。 由于 default 在 JS 中是一个关键字,它就不能被用作变量、函数或类的名称(但它可以被用作属性名称)。因此使用 default 来重命名一个导出是个特例,与非默认导出的语法保持了一致性。若你想用单个语句一次性进行多个导出,并要求包含默认导出,这种语法就非常有用。
导入默认值
你可以使用如下语法来从一个模块中导入默认值:
// import the default
import sum from "./example.js";
console.log(sum(1, 2)); // 3
这个导入语句从 example.js 模块导入了其默认值。注意此处并未使用花括号,与之前在非默认的导入中看到的不同。本地名称 sum 被用于代表目标模块所默认导出的函数。这种语法是最简洁的,而 ES6 的标准制定者也期待它成为在网络上进行导入的主要形式,这样你就能导入已存在的对象。
对于既导出了默认值、又导出了一个或更多非默认的绑定的模块,你可以使用单个语句来导入它的所有导出绑定。例如,假设你有这么一个模块:
export let color = "red";
export default function(num1, num2) {
return num1 + num2;
}
你可以像下面这样使用 import 语句,来同时导入 color 以及作为默认值的函数:
import sum, { color } from "./example.js";
console.log(sum(1, 2)); // 3
console.log(color); // "red"
逗号将默认的本地名称与非默认的名称分隔开,后者仍旧被花括号所包裹。要记住在 import 语句中默认名称必须位于非默认名称之前。
如同导出默认值,你也能使用重命名语法进行默认值的导入:
// equivalent to previous example
import { default as sum, color } from "example";
console.log(sum(1, 2)); // 3
console.log(color); // "red"
在此代码中,默认的导出(default)被重命名为 sum,并且附加的 color 导出也被一并导入了。此例与前面的例子是等效的。