小编今天在用Vue做项目的时候,发现组件中有import和export,刚好今天看到相关的语法介绍和一些实例,下面小编就和大家一起进步。对于模块化规范,在es6出现之前,有以下三种规范,分别是Common.js(Node.js)、AMD(require.js)、CMD(sea.js)。大家还可以关注我的微信公众号,蜗牛全栈。

一、基本用法

  1. // module.js
  2. export const a = 9
  3. export const b = "abc"
  4. export const sum = (x,y) => x+y
  5. const obj = {
  6. name:"lilei"
  7. }
  8. export {obj} // 导出对象的时候需要添加花括号
  9.  
  10. // index.js
  11. import {a,b,sum,obj} from "./module.js" // 必须保证引入的名和export名称完全一致
  12. console.log(a,b) // 5 abc
  13. console.log(sum(2,5)) // 7
  14. console.log(obj) // {name:"lilei"}

二、import 别名

  1. // module.js
  2. export const a = 9
  3. // index.js
  4. import { a as aa } from "./module.js" // 通过as关键字重命名,在使用的时候,使用重命名后的名字即可
  5. console.log(a) // undefind
  6. console.log(aa) // 9

三、export default:只能export default一个数据,如果里面有多个数据,可以通过对象实现。

  1. // module.js
  2. // export defalut const a = 9 报错
  3. const a = 9
  4. const b = "abc"
  5. export defalut a
  6. // index.js
  7. import a from "./module.js" // 导入默认导出的量,不需要用花括号

四、混合导出

  1. // module.js
  2. export const a = 5
  3. export default b = "abc"
  4. // index.js
  5. import {a},b from "./module.js" // 导入不同形式导出的数据

五、导出多个内容

  1. // module.js
  2. class People{
  3. constructor(name){
  4. this.name = name
  5. }
  6. showName(){
  7. console.log("我的名字是:"+this.name)
  8. }
  9. }
  10. const a = 9
  11. const b = "abc"
  12. const sum = (x,y) => x+y
  13. const obj = {
  14. name:"lilei"
  15. }
  16. export {
  17. a,b,sum,obj,People
  18. }
  19. // index.js
  20. import {a,b,sum,obj,People} from "./module.js"
  21. let p = People("lilei")
  22. p.showName() // 我的名字:lilei
  1. // module.js
  2. class People{
  3. constructor(name){
  4. this.name = name
  5. }
  6. showName(){
  7. console.log("我的名字是:"+this.name)
  8. }
  9. }
  10. const a = 9
  11. const b = "abc"
  12. const sum = (x,y) => x+y
  13. const obj = {
  14. name:"lilei"
  15. }
  16. export default {
  17. a,b,sum,obj,People
  18. }
  19. // index.js
  20. import * as aa from "./module.js"
  21. console.log(aa.default.a) // 9

六、创建Interator

  1. function makeInterator(arr){
  2. let nextIndex = 0;
  3. return {
  4. next(){
  5. return nextIndex<arr.length? {
  6. value:arr[nextIndex++],
  7. done:false
  8. }:{
  9. value:undefined,
  10. done:true
  11. }
  12. }
  13. }
  14. }
  15.  
  16. let it = makeInterator(['a','b','c'])
  17. it.next() // {value:"a",done:false}
  18. it.next() // {value:"b",done:false}
  19. it.next() // {value:"c",done:false}
  20. it.next() // {value:undefind,done:true}

七、处理不可遍历对象可以使用for...of...函数。个人感觉类似python中的魔法函数

  1. let course = {
  2. allCourse:{
  3. science:["math","physics","chemistry"],
  4. arts:["geography","history"]
  5. }
  6. }
  7.  
  8. // for...of...
  9. // for(let c of course){
  10. // console.log(c) // 报错:course is not iterable
  11. // }
  12.  
  13. let arr = ["a","b","c"]
  14. console.log(arr) // Symbol(Symbol.iterator) prototype中含有这个属性的,是可遍历的
  15. let it = arr[Symbol.iterator]() // 固定语法
  16. console.log(it.next()) // {value:"a",done:false}
  17. console.log(it.next()) // {value:"b",done:false}
  18. console.log(it.next()) // {value:"c",done:false}
  19. console.log(it.next()) // {value:undefind,done:true}

八、通过处理Symbol.iterator属性来遍历。

  1. let courses = {
  2. allCourse:{
  3. science:["math","physics","chemistry"],
  4. arts:["geography","history"]
  5. }
  6. }
  7.  
  8. courses[Symbol.iterator] = function(){
  9. let allCourse = this.allCourse
  10. let keys = Reflect.ownKeys(allCourse)
  11. let values = []
  12. return {
  13.  
  14. next(){
  15. if(!values.length){
  16. if(keys.length){
  17. values = allCourse[keys[0]]
  18. keys.shift()
  19. }
  20. }
  21. return {
  22. done: !values.length,
  23. value: values.shift()
  24. }
  25. }
  26. }
  27. }
  28.  
  29. for(let c of courses){
  30. console.log(c) // math physics chemistry geography history
  31. }

九、使用generator

  1. let courses = {
  2. allCourse:{
  3. science:["math","physics","chemistry"],
  4. arts:["geography","history"]
  5. }
  6. }
  7.  
  8. courses[Symbol.iterator] = function* (){
  9. let allCourse = this.allCourse
  10. let keys = Reflect.ownKeys(allCourse)
  11. let values = []
  12. while(1){
  13. if(!values.length){
  14. if(keys.length){
  15. values = allCourse[key[0]]
  16. keys.shift()
  17. yield values.shift()
  18. }else{
  19. return false
  20. }
  21. }else{
  22. yield values.shift()
  23. }
  24. }
  25. }
  26.  
  27. for(let c of courses){
  28. console.log(c) // math physics chemistry geography history
  29. }

十、原生具备Interator接口的数据结构,通过for...of...直接遍历

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的arguments对象
  • NodeList对象

ES6中的Module与Interator的更多相关文章

  1. Nodejs与ES6系列4:ES6中的类

    ES6中的类 4.1.class基本语法 在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码 function Shape(width,height) ...

  2. ES6中的Symbol类型

    前面的话 ES5中包含5种原始类型:字符串.数字.布尔值.null和undefined.ES6引入了第6种原始类型——Symbol ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个 ...

  3. ES6中的模块

    前面的话 JS用"共享一切"的方法加载代码,这是该语言中最容出错且容易令人感到困惑的地方.其他语言使用诸如包这样的概念来定义代码作用域,但在ES6以前,在应用程序的每一个JS中定义 ...

  4. ES6中export , export default , import模块系统总结

    最近在学习使用Webpack3的时候发现,它已经可以在不使用babel的情况下使用ES6的模块加载功能了. 说到ES6的模块加载功能,我们先复习一下CommonJS规范吧: 一  . CommonJS ...

  5. es6中的模块化

    在之前的javascript中是没有模块化概念的.如果要进行模块化操作,需要引入第三方的类库.随着技术的发展,前后端分离,前端的业务变的越来越复杂化.直至ES6带来了模块化,才让javascript第 ...

  6. CommonJS 规范中的 module、module.exports 区别

    CommonJS 规范中的 module.module.exports 区别 CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即mod ...

  7. ES6中关于数据类型的拓展:Symbol类型

    ES5中包含5种原始类型:字符串.数值.布尔值.null.undefined.ES6引入了第6种原始类型——Symbol. ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个他人提供 ...

  8. ES6中比较实用的几个特性

    1.Default Parameters(默认参数) in ES6 es6之前,定义默认参数的方法是在一个方法内部定义 var link = function (height, color, url) ...

  9. ES6中Class与export简单用法

    一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...

随机推荐

  1. java数组 简单了解

    一.关于集合 1.数组,链表和哈希表(散列表)的存储方式 (1)传统的数组结构存储数据会在内存中开辟连续得空间,结合下标从而使得可以快速访问数据,但是删除和添加数据就很浪费资源 (2)链表不需要开辟连 ...

  2. 【BUAA_2020_软工】个人作业

    个人项目作业博客 1. 在文章开头给出教学班级和可克隆的 Github 项目地址(例子如下).(1') 项目 内容 北航2020软工 班级博客 作业要求 具体要求 项目GitHub地址 个人项目 教学 ...

  3. 剑指offer 数组中的重复数字

    问题描述: 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1 ...

  4. str.isdigit()可以判断变量是否为数字

    字符串.isdigit()可以判断变量是否为数字 是则输出True 不是则输出False 好像只能字符串

  5. 无连接运输:UDP

    多路复用和解复用与校验和是UDP唯一能做的事,运输层的协议必须做点什么,什么都没有就不需要这一层了. 为什么要使用UDP 既然有了可靠传输的TCP,为什么还要在udp之上来构件应用呢? 有效载荷大,T ...

  6. SpringCloud-OAuth2(一):基础篇

    关于Oauth2 的详细介绍官网地址:https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth 1:什么是OAuth2 首先, ...

  7. 用JIRA管理你的项目——(二)JIRA语言包支持及插件支持

    昨天兴奋地把JIRA环境搭好,瞅了一眼管理界面--全英文,真是汗! 尚且不说全中文版管理界面让人操作起来多少会有困难,更别说是全英文! 昨天赞叹JIRA语言包支持丰富,今天终于找到了号称100%的语言 ...

  8. 使用CSS设置边框和背景

    一.设置边框 1.边框样式 属性 说明 border-width 设置边框的宽度 boder-style 设置边框的样式 border-color 设置边框的颜色 a.border-width属性 自 ...

  9. Linux占用swap分区过高,物理内存还有剩余

    Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...

  10. Docker 的神秘世界

    引言 上图就是 Docker 网站的首页,看了这简短的解释,相信你还是不知道它是何方神圣. 讲个故事 为了更好的理解 Docker 是什么,先来讲个故事: 我需要盖一个房子,于是我搬石头.砍木头.画图 ...