JavaScript ES6中export、import与export default的用法和区别


Posted in Javascript onMarch 14, 2017

前言

相信很多人都使用过export、export default、import,然而它们到底有什么区别呢? 在看他们之间的区别之前,我们先来看看它们的用法。

ES6 import和export的用法

ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范。commonjs主要应用于服务器,实现同步加载,如nodejs。AMD规范应用于浏览器,如requirejs,为异步加载。同时还有CMD规范,为同步加载方案如seaJS。

ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

ES6模块主要有两个功能:export和import

  • export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口
  • 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

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' //导入的时候没有花括号

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery的Theme和Theme Switcher使用小结
Sep 08 Javascript
Javascript学习笔记之相等符号与严格相等符号
Nov 23 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
Dec 15 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
Sep 04 Javascript
javascript获取网页各种高宽及位置的方法总结
Jul 27 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
Angular2生命周期钩子函数的详细介绍
Jul 10 Javascript
Node.js net模块功能及事件监听用法分析
Jan 05 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
May 09 Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 #Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 #Javascript
vuejs响应用户事件(如点击事件)
Mar 14 #Javascript
微信小程序 在线支付功能的实现
Mar 14 #Javascript
JS和canvas实现俄罗斯方块
Mar 14 #Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
Mar 14 #Javascript
canvas实现刮刮卡效果
Mar 14 #Javascript
You might like
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
利用Python破解验证码实例详解
2016/12/08 Python
python @classmethod 的使用场合详解
2019/08/23 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
24个canvas基础知识小结
2014/12/17 HTML / CSS
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
公证书样本
2014/04/10 职场文书
业务员辞职信范文
2015/03/02 职场文书
总结Python常用的魔法方法
2021/05/25 Python
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA
MongoDB支持的索引类型
2022/04/11 MongoDB