ES6中的Module与Interator
小编今天在用Vue做项目的时候,发现组件中有import和export,刚好今天看到相关的语法介绍和一些实例,下面小编就和大家一起进步。对于模块化规范,在es6出现之前,有以下三种规范,分别是Common.js(Node.js)、AMD(require.js)、CMD(sea.js)。大家还可以关注我的微信公众号,蜗牛全栈。
一、基本用法
- // module.js
- export const a = 9
- export const b = "abc"
- export const sum = (x,y) => x+y
- const obj = {
- name:"lilei"
- }
- export {obj} // 导出对象的时候需要添加花括号
- // index.js
- import {a,b,sum,obj} from "./module.js" // 必须保证引入的名和export名称完全一致
- console.log(a,b) // 5 abc
- console.log(sum(2,5)) // 7
- console.log(obj) // {name:"lilei"}
二、import 别名
- // module.js
- export const a = 9
- // index.js
- import { a as aa } from "./module.js" // 通过as关键字重命名,在使用的时候,使用重命名后的名字即可
- console.log(a) // undefind
- console.log(aa) // 9
三、export default:只能export default一个数据,如果里面有多个数据,可以通过对象实现。
- // module.js
- // export defalut const a = 9 报错
- const a = 9
- const b = "abc"
- export defalut a
- // index.js
- import a from "./module.js" // 导入默认导出的量,不需要用花括号
四、混合导出
- // module.js
- export const a = 5
- export default b = "abc"
- // index.js
- import {a},b from "./module.js" // 导入不同形式导出的数据
五、导出多个内容
- // module.js
- class People{
- constructor(name){
- this.name = name
- }
- showName(){
- console.log("我的名字是:"+this.name)
- }
- }
- const a = 9
- const b = "abc"
- const sum = (x,y) => x+y
- const obj = {
- name:"lilei"
- }
- export {
- a,b,sum,obj,People
- }
- // index.js
- import {a,b,sum,obj,People} from "./module.js"
- let p = People("lilei")
- p.showName() // 我的名字:lilei
- // module.js
- class People{
- constructor(name){
- this.name = name
- }
- showName(){
- console.log("我的名字是:"+this.name)
- }
- }
- const a = 9
- const b = "abc"
- const sum = (x,y) => x+y
- const obj = {
- name:"lilei"
- }
- export default {
- a,b,sum,obj,People
- }
- // index.js
- import * as aa from "./module.js"
- console.log(aa.default.a) // 9
六、创建Interator
- function makeInterator(arr){
- let nextIndex = 0;
- return {
- next(){
- return nextIndex<arr.length? {
- value:arr[nextIndex++],
- done:false
- }:{
- value:undefined,
- done:true
- }
- }
- }
- }
- let it = makeInterator(['a','b','c'])
- it.next() // {value:"a",done:false}
- it.next() // {value:"b",done:false}
- it.next() // {value:"c",done:false}
- it.next() // {value:undefind,done:true}
七、处理不可遍历对象可以使用for...of...函数。个人感觉类似python中的魔法函数
- let course = {
- allCourse:{
- science:["math","physics","chemistry"],
- arts:["geography","history"]
- }
- }
- // for...of...
- // for(let c of course){
- // console.log(c) // 报错:course is not iterable
- // }
- let arr = ["a","b","c"]
- console.log(arr) // Symbol(Symbol.iterator) prototype中含有这个属性的,是可遍历的
- let it = arr[Symbol.iterator]() // 固定语法
- console.log(it.next()) // {value:"a",done:false}
- console.log(it.next()) // {value:"b",done:false}
- console.log(it.next()) // {value:"c",done:false}
- console.log(it.next()) // {value:undefind,done:true}
八、通过处理Symbol.iterator属性来遍历。
- let courses = {
- allCourse:{
- science:["math","physics","chemistry"],
- arts:["geography","history"]
- }
- }
- courses[Symbol.iterator] = function(){
- let allCourse = this.allCourse
- let keys = Reflect.ownKeys(allCourse)
- let values = []
- return {
- next(){
- if(!values.length){
- if(keys.length){
- values = allCourse[keys[0]]
- keys.shift()
- }
- }
- return {
- done: !values.length,
- value: values.shift()
- }
- }
- }
- }
- for(let c of courses){
- console.log(c) // math physics chemistry geography history
- }
九、使用generator
- let courses = {
- allCourse:{
- science:["math","physics","chemistry"],
- arts:["geography","history"]
- }
- }
- courses[Symbol.iterator] = function* (){
- let allCourse = this.allCourse
- let keys = Reflect.ownKeys(allCourse)
- let values = []
- while(1){
- if(!values.length){
- if(keys.length){
- values = allCourse[key[0]]
- keys.shift()
- yield values.shift()
- }else{
- return false
- }
- }else{
- yield values.shift()
- }
- }
- }
- for(let c of courses){
- console.log(c) // math physics chemistry geography history
- }
十、原生具备Interator接口的数据结构,通过for...of...直接遍历
- Array
- Map
- Set
- String
- TypedArray
- 函数的arguments对象
- NodeList对象
ES6中的Module与Interator的更多相关文章
- Nodejs与ES6系列4:ES6中的类
ES6中的类 4.1.class基本语法 在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码 function Shape(width,height) ...
- ES6中的Symbol类型
前面的话 ES5中包含5种原始类型:字符串.数字.布尔值.null和undefined.ES6引入了第6种原始类型——Symbol ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个 ...
- ES6中的模块
前面的话 JS用"共享一切"的方法加载代码,这是该语言中最容出错且容易令人感到困惑的地方.其他语言使用诸如包这样的概念来定义代码作用域,但在ES6以前,在应用程序的每一个JS中定义 ...
- ES6中export , export default , import模块系统总结
最近在学习使用Webpack3的时候发现,它已经可以在不使用babel的情况下使用ES6的模块加载功能了. 说到ES6的模块加载功能,我们先复习一下CommonJS规范吧: 一 . CommonJS ...
- es6中的模块化
在之前的javascript中是没有模块化概念的.如果要进行模块化操作,需要引入第三方的类库.随着技术的发展,前后端分离,前端的业务变的越来越复杂化.直至ES6带来了模块化,才让javascript第 ...
- CommonJS 规范中的 module、module.exports 区别
CommonJS 规范中的 module.module.exports 区别 CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即mod ...
- ES6中关于数据类型的拓展:Symbol类型
ES5中包含5种原始类型:字符串.数值.布尔值.null.undefined.ES6引入了第6种原始类型——Symbol. ES5的对象属性名都是字符串,很容易造成属性名冲突.比如,使用了一个他人提供 ...
- ES6中比较实用的几个特性
1.Default Parameters(默认参数) in ES6 es6之前,定义默认参数的方法是在一个方法内部定义 var link = function (height, color, url) ...
- ES6中Class与export简单用法
一.Class ES6中的Class用法类似Java的Class用法,但class的本质是js一个function //定义类 class Person { //定义构造方法 constructor( ...
随机推荐
- java数组 简单了解
一.关于集合 1.数组,链表和哈希表(散列表)的存储方式 (1)传统的数组结构存储数据会在内存中开辟连续得空间,结合下标从而使得可以快速访问数据,但是删除和添加数据就很浪费资源 (2)链表不需要开辟连 ...
- 【BUAA_2020_软工】个人作业
个人项目作业博客 1. 在文章开头给出教学班级和可克隆的 Github 项目地址(例子如下).(1') 项目 内容 北航2020软工 班级博客 作业要求 具体要求 项目GitHub地址 个人项目 教学 ...
- 剑指offer 数组中的重复数字
问题描述: 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1 ...
- str.isdigit()可以判断变量是否为数字
字符串.isdigit()可以判断变量是否为数字 是则输出True 不是则输出False 好像只能字符串
- 无连接运输:UDP
多路复用和解复用与校验和是UDP唯一能做的事,运输层的协议必须做点什么,什么都没有就不需要这一层了. 为什么要使用UDP 既然有了可靠传输的TCP,为什么还要在udp之上来构件应用呢? 有效载荷大,T ...
- SpringCloud-OAuth2(一):基础篇
关于Oauth2 的详细介绍官网地址:https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth 1:什么是OAuth2 首先, ...
- 用JIRA管理你的项目——(二)JIRA语言包支持及插件支持
昨天兴奋地把JIRA环境搭好,瞅了一眼管理界面--全英文,真是汗! 尚且不说全中文版管理界面让人操作起来多少会有困难,更别说是全英文! 昨天赞叹JIRA语言包支持丰富,今天终于找到了号称100%的语言 ...
- 使用CSS设置边框和背景
一.设置边框 1.边框样式 属性 说明 border-width 设置边框的宽度 boder-style 设置边框的样式 border-color 设置边框的颜色 a.border-width属性 自 ...
- Linux占用swap分区过高,物理内存还有剩余
Linux占用swap分区过高,物理内存还有剩余 问题分析 Swap配置对性能的影响 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误.如果系统的物理内存用光了,系统就会跑得 ...
- Docker 的神秘世界
引言 上图就是 Docker 网站的首页,看了这简短的解释,相信你还是不知道它是何方神圣. 讲个故事 为了更好的理解 Docker 是什么,先来讲个故事: 我需要盖一个房子,于是我搬石头.砍木头.画图 ...