JavaScript ES6模块系统:export、import与export default详解
本文深入解析JavaScript ES6模块系统中的核心命令。详细对比export、import与export default的语法差异及使用场景,涵盖变量、函数及默认导出的具体写法。通过对比CommonJS与AMD规范,阐明ES6模块作为通用解决方案的优势,并提供代码示例说明如何正确导出与导入模块内容。
ES6模块系统概述
前言
开发者通常已熟悉export、export default和import的使用,但对其具体区别可能仍存疑惑。在深入探讨差异之前,首先梳理它们的基本用法是必要的。
ES6 import和export的用法
ES6模块基本用法
在ES6标准推出前,JavaScript模块加载主要依赖CommonJS和AMD规范。CommonJS侧重于服务器端同步加载,典型应用为Node.js;而AMD规范(如RequireJS)则针对浏览器环境的异步加载设计。此外,CMD规范(如SeaJS)也提供了同步加载方案。
ES6在语言规范层面直接实现了模块功能,其实现简洁且高效,旨在取代现有的CommonJS和AMD规范,成为浏览器与服务器端通用的模块解决方案。
ES6模块体系主要包含两个核心功能:export和import。
- export命令用于向外输出本模块(通常指一个JS文件)中变量的接口。
- import命令用于在某一模块中加载另一个包含export接口的模块。
这意味着,当使用export命令定义了对外接口后,其他JS文件即可通过import命令加载该模块(文件)。例如,假设文件a和b位于同一目录下:
// a.js
var sex="boy";
var echo=function(value){
console.log(value)
}
export {sex,echo}
//通过向大括号中添加sex,echo变量并且export输出,就可以将对应变量值以sex、echo变量标识符形式暴露给其他文件而被读取到
//不能写成export sex这样的方式,如果这样就相当于export "boy",外部文件就获取不到该文件的内部变量sex的值,因为没有对外输出变量接口,只是输出的字符串。
// b.js
通过import获取a.js文件的内部变量,{}括号内的变量来自于a.js文件export出的变量标识符。
import {sex,echo} from "./a.js"
console.log(sex) // boy
echo(sex) // boy
文件a.js也可以采用如下export语法进行编写,但相比前文示例不够直观,因此不推荐此种写法。
// a.js
export var sex="boy";
export var echo=function(value){
console.log(value)
}
//因为function echo(){}等价于 var echo=function(){}所以也可以写成
export function echo(value){
console.log(value)
}
以上介绍了export与module的基本用法,接下来进行拓展学习。
从前例可见,b.js在使用import命令时,必须知晓a.js所暴露的变量标识符,否则无法正确加载。为此,可以使用export default命令为模块指定默认输出,从而无需知晓具体的变量名。
//a.js
var sex="boy";
export default sex(sex不能加大括号)
//原本直接export sex外部是无法识别的,加上default就可以了.但是一个文件内最多只能有一个export default。
其实此处相当于为sex变量值"boy"起了一个系统默认的变量名default,自然default只能有一个值,所以一个文件内不能有多个export default。
// b.js
本质上,a.js文件的export default输出一个叫做default的变量,然后系统允许你为它取任意名字。所以可以为import的模块起任何变量名,且不需要用大括号包含
import any from "./a.js"
import any12 from "./a.js"
console.log(any,any12) // boy,boy
export与export default的区别
ES6中export、import与export default区别
在JavaScript ES6中,export与export default均可用于导出常量、函数、文件或模块。在其他文件或模块中,可通过import+(常量|函数|文件|模块)名的方式将其导入并使用。然而,在一个文件或模块中,export和import可以有多个,但export default仅能有一个。
具体使用场景如下:
1、
//demo1.js
export const str = 'hello world'
export function f(a){
return a+1
}
对应的导入方式:
//demo2.js
import { str, f } from 'demo1' //也可以分开写两次,导入的时候带花括号
2、
//demo1.js
export default const str = 'hello world'
对应的导入方式:
//demo2.js
import str from 'demo1' //导入的时候没有花括号
总结
上述内容涵盖了本文的全部要点,希望能为读者的学习或工作提供帮助。如有任何疑问,欢迎留言交流,感谢支持。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
