了解ES6

内容:

1.ES6介绍及基础

2.模块、类和继承

3.ES6高级特性

4.Generator和Iterator

5.异步编程

内容参考:《ES6 标准入门》

ES6标准阅读链接:http://es6.ruanyifeng.com/

一、ES6介绍及基础

1.什么是ES6

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言

2.JavaScript版本

JavaScript有很多版本,具体版本如下:

3.ES6基础

(1)let

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是let所声明的变量,只在let命令所在的代码块内有效,另外let命令可以创建块级作用域

let和var的区别:

 1 {
 2   let a = 10;
 3   var b = 1;
 4 }
 5
 6 console.log(a)  // ReferenceError: a is not defined.
 7 console.log(b)  // 1
 8 // 结果表明,let声明的变量只在它所在的代码块有效
 9
10
11 // var和let的区别:
12 // 下面的代码如果使用var,最后输出的是10:
13 var a = [];
14 for (var i = 0; i < 10; i++) {
15   a[i] = function () {
16     console.log(i);
17   };
18 }
19 a[6]()  //  10
20
21
22 // 如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6。
23 var a = [];
24 for (let i = 0; i < 10; i++) {
25   a[i] = function () {
26     console.log(i);
27   };
28 }
29 a[6]()  // 6

for循环的特别之处:

1 // 设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
2 // 例如下面这段代码:
3 for (let i = 0; i < 3; i++) {
4   let i = ‘abc‘;
5   console.log(i);
6 }
7 // abc
8 // abc
9 // abc

另外,var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错

1 // var 的情况
2 console.log(foo); // 输出undefined
3 var foo = 2;
4
5 // let 的情况
6 console.log(bar); // 报错ReferenceError
7 let bar = 2;

(2)const

const声明一个只读的常量;一旦声明,常量的值就不能改变,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值;const的作用域与let命令相同:只在声明所在的块级作用域内有效

 1 const PI = 3.1415;
 2 PI  // 3.1415
 3
 4 PI = 3;
 5 // TypeError: Assignment to constant variable.
 6 // 改变常量的值会报错
 7
 8
 9 const foo;
10 // SyntaxError: Missing initializer in const declaration

二、模块、类和继承

1.模块module

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案;ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性

ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入:

1 // export
2 export function stat() {}
3 export function exists() {}
4 export function readFile () {}
5 // import
6 import { stat, exists, readFile } from ‘fs‘;

上面代码的实质是从fs模块加载 3 个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高

模块详细内容:http://es6.ruanyifeng.com/#docs/module

2.类class

下面是ES5和ES6定义类的写法:

 1 // ES5:
 2 function Point(x, y) {
 3   this.x = x;
 4   this.y = y;
 5 }
 6
 7 Point.prototype.toString = function () {
 8   return ‘(‘ + this.x + ‘, ‘ + this.y + ‘)‘;
 9 };
10
11 var p = new Point(1, 2);
12
13
14 //ES6:
15 class Point {
16   constructor(x, y) {
17     this.x = x;
18     this.y = y;
19   }
20
21   toString() {
22     return ‘(‘ + this.x + ‘, ‘ + this.y + ‘)‘;
23   }
24 }

类详细介绍:http://es6.ruanyifeng.com/#docs/class

3.继承inherit

ES6中Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多

 1 class Point {
 2     constructor(x, y) {
 3         this.x = x;
 4         this.y = y;
 5     }
 6 }
 7
 8
 9 class ColorPoint extends Point {
10   constructor(x, y, color) {
11     super(x, y); // 调用父类的constructor(x, y)
12     this.color = color;
13   }
14
15   toString() {
16     return this.color + ‘ ‘ + super.toString(); // 调用父类的toString()
17   }
18 }

继承详细内容:http://es6.ruanyifeng.com/#docs/class-extends

三、ES6高级特性

1.变量的解构赋值

ES6中允许这样的赋值方式:

 1 let [a, b, c] = [1, 2, 3]
 2
 3 let [foo, [[bar], baz]] = [1, [[2], 3]];
 4 foo // 1
 5 bar // 2
 6 baz // 3
 7
 8 let [ , , third] = ["foo", "bar", "baz"];
 9 third // "baz"
10
11 let [x, , y] = [1, 2, 3];
12 x // 1
13 y // 3
14
15 let [head, ...tail] = [1, 2, 3, 4];
16 head // 1
17 tail // [2, 3, 4]
18
19 let [x, y, ...z] = [‘a‘];
20 x // "a"
21 y // undefined
22 z // []

另外如果解析不成功,值就为undefined,如下所示:

1 let [foo] = [];
2 let [bar, foo] = [1];
3 // 以上两种情况都属于解构不成功,foo的值都会等于undefined

更多细节:http://es6.ruanyifeng.com/#docs/destructuring

2.spread 和 rest

(1)拓展运算符spread

(2)rest

3.template

4.symbol

5.map和set

四、Generator和Iterator

五、异步编程

原文地址:https://www.cnblogs.com/wyb666/p/9393336.html

时间: 2024-12-19 16:01:09

了解ES6的相关文章

es6学习 -- 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. 我认为

ES6之主要知识点(六)数组

引自http://es6.ruanyifeng.com/#docs/array 1.扩展运算符(...) 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { return x + y; } var numbers = [4, 38]; add(...n

ES6简介

概述 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布,也叫ES2015. 语法提案的批准流程 新的语法从正式提案到正式成为标准,需要经历5个过程. Stage 0 - Strawman(展示阶段) Stage 1 - Proposal(征求意见阶段) Stage 2 - Draft(草案阶段) Stage 3 - Candidate(候选人阶段) Stage 4 - Finished(定案阶段) 一个提案进入Stage 2

es6的一些基本语法

首先说一下什么是es6: ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准; let 和 const 命令 let的基本用法: 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调用这两个变量,结果let声明的变量报错, var声明的变量返回了正确的值.这表明,let声明的变量只在它所在的代码块有效. const的基本用法: const声明的是一个常量,不能被修改,所以第二次声明后会报错! 数组的解构赋值: 之前最基本的写法是这样

js的ES6特性

一. let和const关键字 let出现之前,js所有的作用域都是以函数为单位的,只要在一个function里声明的var, 无论是for循环等块里面声明的还是在块外面声明的,整个function都可以使用这个var,比如: function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然可以引用变量i } 我个人的理解是js的提升特性,函数会将里面声明的所有var都提升到函数开始的地方,所以整个函数内都共享这些var. let

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

30分钟掌握ES6核心内容

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将

ES6之块级作用域

一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一术语--“变量提升(hoisting)”. 如下: function func(){ console.log(test); var test = 1; }; func(); 在node环境执行上述代码,结果为: 之所以为’undefined’,原因就在于‘变量提升’,在进入func函数时,将所有通过

[ES6] 03. The let keyword -- 1

var message = "Hi"; { var message = "Bye"; } console.log(message); //Bye The message inside the block still has impact on the outside. If you add function around the inside message: var message = "Hi"; function greeting(){ va

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /