1.概要

- ECMAScript2015(ES6)是Javascript最标准的语法式样,是在2015年6月由Ecma国籍组织公布的最新版本,现在已经被多个领域和浏览器所广泛采纳和使用。

2.学习网址:

- https://github.com/lukehoban/es6features- https://babeljs.io/learn-es2015/
- https://es6.ruanyifeng.com/#docs

3.开发工具

- nodejs 10.x

4.编辑器

- vscode

- 运行命令 node test001.js

5.新特性

  1. let 和 const
  2. 变量结构赋值
  3. 数组
  4. 字符串
  5. 函数
  6. 面向对象
  7. Promise
  8. generator
  9. 模块化

6.let 和 const 命令

- let 知识点

1.限定作用域
2.不允许重复定义

-- 作用域

1.ES6 新增了let 命令,他用法类似var ,但是所声明的变量,只能再代码块中有用 ,说明 : var 不够严谨,let 只能作用再块级作用域;

if (true) {
let a = 1;
var b = 2;
}
console.log(b); // 2
console.log(a); // ReferenceError: a is not defined 报错,提示a未定义;

2.不允许重复定义,重复声明一个变量,这种情况本身就不合适,不管是再java ,python中都没有这种定义

var i = 0;
switch (i) {
case 0 :
var value = "hello";
break;
case 1 :
var value = "world";
break;
} console.log(value); // hello

 

var i = 0;
switch (i) {
case 0 :
let value = "hello";
break;
case 1 :
let value = "world";
break;
} console.log(value); // SyntaxError: Identifier 'value' has already been declared 已经被定义过了,不能重复定义

- const 命令

- 知识点

定义常量

-- 声明一个只读的常量,一旦声明,不能修改

const num = 10;
console.log(num); // 10

-- const 声明变量不得改变值,说明,一旦声明必须初始化

const num ;
console.log(num); // SyntaxError: Missing initializer in const declaration 没有初始化

-- const 也是只有在块级作用域中有效

if (true) {
const num = 10;
} console.log(num); // ReferenceError: num is not defined

-- const 与 let 命令一样,变量不可重复定义


7.变量的结构赋值

  1. 数组赋值
  2. 对象赋值
  3. 函数赋值
  4. 函数参数指明

-- 数组赋值 按照对应的位置,赋值

let [a,b,c] = [10,20,30];
console.log(a,b,c); // 10,20,30

-- 如果对应的位置没有值的话,解析会不成功,对应的变量会是undefined

let [a,b,c] = [10,20];
console.log(a,b,c); // 10 20 undefined

-- ... 赋值,其他后面的

let [a,b,...other] = [10,20,30,40,50];
console.log(a,b,other); // 10 20 [ 30, 40, 50 ]

  

-- 对象赋值 对象赋值变量必须与属性同名,才能取到值

let {name , age} = {name : "wx" , age : 18} ;
console.log(name,age);

  

-- 函数赋值

function sum () {
return [10,20];
} let [num1,num2] = sum();
console.log(num1,num2);

  

-- 函数指明赋值

function sum ({x=1,y=2}) {
return x + y ;
} console.log(sum({})); //3
console.log(sum({x:2})); // 4
console.log(sum({x:2,y:5})); // 7

8.嵌入字符串

- 知识点

  1. 字符串嵌入方式
  2. 字符串模板定义

- 模板,反单引号`${}`

let name = 'john';
let mystr = `hello ${name}`;
console.log(mystr); //hello john

9.数组

- 知识点

新的数组循环方式 for of

- 循环所有的值

let list = [10,20,30];
for(let val of list)
console.log(val);

  

- 循环所有的下标

let list = [10,20,30];
for(let val in list)
console.log(val, list[val]);

10.箭头函数

- 知识点

  1. 通过箭头函数简化代码2.当只有一个参数的时候可以省略()
  2. 当只有一个return 的时候可以省略 {}

- 普通函数

function sum(x) {
return x ;
} console.log(sum(1)); // 1

  

- 箭头函数简化, 去掉 funtion , 改成 =>

let sum = (x) => {
return x;
} console.log(sum(1)); // 1 只有一个 参数的时候可以省略() let sum = x => {
return x;
} console.log(sum(1)); // 1 只有一个return 可以省略 {} 最终简化成 let sum = x => x; console.log(sum(1));

11.类

- 知识点

  1. 新的类定义
  2. 类的实例
  3. setter / getter
  4. 类的继承

- 更像java python ES6 中 class 用来定义类 constructor 定义构造方法 通过new 生成新的实例对象

class show {
constructor (name,age) {
this.name = name;
this.age = age;
} showName() {
console.log(this.name)
} showAge() {
console.log(this.age)
}
} let name = new show('wx',18);
name.showName(); //wx

- 类的实例

let name = show('wx',18) // TypeError: Class constructor show cannot be invoked without 'new'
let name = new show('wx',18); //true

- setter / getter  set get, 某个属性存储值和取值函数

class show {
constructor (name,sex) {
this.name = name;
this.sex = sex;
} get age() {
return this._age;
} set age(val) {
this._age = val;
}
} let name = new show('wx','F');
console.log(name); //{ name: 'wx', sex: 'F' }
name.age = 19;
console.log(name); //{ name: 'wx', sex: 'F', _age: 19 }

  

- 类继承

- 知识点

  1. extends

  2. super

- super 调用父类的 constructor 使用super(),代表父类有构造函数

class A {}
class B extends A {
constructor() {
super();
}
}

  

// 实例
class Name {
constructor(name){
this.name = name;
}
show(){
console.log(`用户名${this.name}`);
}
} class User extends Name {
constructor(name, age) {
super(name);
this.age = age;
}
showUser(){
return (`年龄是${this.age}`)
}
} let mycar = new User("wx", "18");
mycar.show();
console.log(mycar.showUser()); // 用户名wx 年龄是18

  


12.generator 迭代器

- 知识点

1.function *xx {} 迭代生成器
2.yield :迭代返回
3.next() 方法参数

- generator 函数 需要在function 关键字与函数名之间加个星号, 一般函数用return ,return 就直接返回了,但是generator 函数 用yield 返回,可以多次返回

// 实例
function *show() {
yield "h";
yield "e";
yield 'l';
yield 'l';
yield '0';
} for (let val of show()) {
console.log(val);
}

  

- next()

遍历器对象的next方法的运行逻辑如下。

(1)遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回的对象的value属性值。

(2)下一次调用next方法时,再继续往下执行,直到遇到下一个yield表达式。

(3)如果没有再遇到新的yield表达式,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的值,作为返回的对象的value属性值。

(4)如果该函数没有return语句,则返回的对象的value属性值为undefined。

function *show() {
console.log(1);
yield;
console.log(2);
} let generator = show();
generator.next();
generator.next();

  

【ES6】ES6入门笔记的更多相关文章

  1. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  2. ES6快速入门(二)数据结构

    ES6快速入门 一.解构 1. 对象解构 let person = { name: 'Tang', age: 28 }; //必须同名,必须初始化 let {name, age} = person; ...

  3. ES6快速入门(一)函数与作用域

    ES6快速入门 一.块级绑定 1.var声明与变量提升 使用var声明的变量,不论在何处都会被视为(声明)在函数级作用域顶部的位置发生. function getValue(condition) { ...

  4. python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)

    BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...

  5. es6 快速入门 系列

    es6 快速入门(未完结,持续更新中...) 前言 为什么要学习es6 es6对于所有javaScript开发者来说,非常重要 未来,es6将构成javaScript应用程序的基础 es6中很多特性, ...

  6. es6 快速入门 —— 函数

    其他章节请看: es6 快速入门 系列 函数 函数是所有编程语言的重要组成部分,es6之前函数语法一直没什么变化,遗留了许多问题,javaScript开发者多年来不断抱怨,es6终于决定大力度更新函数 ...

  7. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  8. es6 快速入门 系列 —— promise

    其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...

  9. es6快速入门 系列 - async

    其他章节请看: es6 快速入门 系列 async 前文我们已经知道 promise 是一种异步编程的选择.而 async 是一种用于执行异步任务更简单的语法. Tip:建议学完 Promise 在看 ...

  10. es6 快速入门 系列 —— 类 (class)

    其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...

随机推荐

  1. python自动化测试,读取excal数据报"'str' object has no attribute 'items'"问题解决

    通过python进行自动化测试,为了方便,对代码和数据进行了分离,此处把测试数据放到了excal表格中.requests.post请求时报"'str' object has no attri ...

  2. 12 Servlet_04 Servlet增删改查 静态页面与动态页面 EL表达式 table表格的一些样式

    今天学习了servlet的增删改查: 存储数据 setAttribute(String name,Object obj );获取数据 getAttribute(String name);删除数据 re ...

  3. Java学习的第十五天

    1.今天复习了第四章的内容 重新看了看方法参数问题,final修饰的关键字 2.今天没问题 3.明天学习多态变化

  4. ZOJ 1005 Jugs(BFS)

    Jugs In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with th ...

  5. Docker(3)- Centos 7.x 下 Docker 镜像加速配置

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 默认情况下,Docker ...

  6. springcloud feign使用

    1.Spring cloud fein的继承特性 通过对接口的继承,能够实现对fein客户端和feign服务器代码量的减少. 2.Ribbon配置 {服务名}.ribbon.ConnectTimeOu ...

  7. Grafana+Prometheus+node_exporter监控,Grafana无法显示数据的问题

    环境搭建: 被测linux机器上部署了Grafana,Prometheus,node_exporter,并成功启动了它们. Grafana中已经创建了Prometheus数据源,并测试通过,并且导入了 ...

  8. 聚类之k-means附代码

    import osimport sys as sys#reload(sys)#sys.setdefaultencoding('utf-8')from sklearn.cluster import KM ...

  9. 剑指Offer-Python(1-5)

    1.二维数组的查找 查找,其实就可以挨个进行比较就可以.又由于题目说明(每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序),因此如果利用类似于二分查找的方法,那么比较次数则会更少 ...

  10. AI时代,还不了解大数据?

    如果要问最近几年,IT行业哪个技术方向最火?一定属于ABC,即AI + Big Data + Cloud,也就是人工智能.大数据和云计算. 这几年,随着互联网大潮走向低谷,同时传统企业纷纷进行数字化转 ...