ES6新增语法| 青训营笔记

55 阅读5分钟

这是我参与「第五届青训营 」笔记创作活动的第1天

let 关键字

用来声明变量,使用 let 声明的变量有几个特点:

  • 不允许重复声明

     let a
     不能再写一个let a
     ​
    
  • 块级作用域

     一个括号就是块级作用域{},包括eval
    
  • 不存在变量提升
  • 不影响作用域链

const 关键字

就是常量let

变量的解构赋值

 const arr = ['张学友', '刘德华', '黎明', '郭富城'];
 let [zhang, liu, li, guo] = arr;
 //等同于
 let zhang='张学友',
     let liu='刘德华'……

模板字符串

 `两个反引号中间就是模板字符串`
 `可以
 换行`
 `可以用 ${xxx}输出变量`

简化对象写法

ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

箭头函数

 let function =()=>{
     
 }
 ​

  • 如果形参只有一个,则小括号可以省略
  • 函数体如果只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果
  • 箭头函数 this 指向声明时所在作用域下 this 的值
  • 箭头函数不能作为构造函数实例化
  • 不能使用 arguments

rest 参数

ES6 引入 rest 参数,用于获取函数的实参,用来代替 arguments

 /**
 * 作用与 arguments 类似
 */
 function add(...args){
  console.log(args);
 }
 add(1,2,3,4,5);
 /**
 * rest 参数必须是最后一个形参
 */
 function minus(a,b,...args){
  console.log(a,b,args);
 }
 minus(100,1,2,3,4,5,19);

spread 扩展运算符

 let body=['丁真','孙笑川','陈睿']
 ...body=='丁真','孙笑川','陈睿'//去掉'[]'
 //另外也可以展开对象(去掉'{}')

Symbol

第7种数据类型

  • Symbol 的值是唯一的,用来解决命名冲突的问题
  • Symbol 值不能与其他数据进行运算
  • Symbol 定义 的 对象属 性 不能 使 用 for…in 循 环遍 历 ,但 是可 以 使 用Reflect.ownKeys 来获取对象的所有键名

注意:

 let a = Symbol('i');
 let b = Symbol('i');
 console.log(a === b);//false
 let c = Symbol.for('j');
 let d = Symbol.for('j');
 console.log(c === d)//true

Map

特殊的键值对集合,键不止字符串,可以是任何东西

  • size 返回 Map 的元素个数
  • set 增加一个新元素,返回当前 Map
  • get 返回键名对象的键值
  • has 检测 Map 中是否包含某个元素,返回 boolean 值
  • clear 清空集合,返回 undefined

Set

集合,元素不可重复,可以使用『扩展运算符』和『for…of…』,用let a=new Set()创建

  • size返回集合的元素个数
  • add 增加一个新元素,返回当前集合
  • delete 删除元素,返回 boolean 值
  • has 检测集合中是否包含某个元素,返回 boolean 值
  • clear 清空集合,返回 undefined

用途:结合扩展运算符去重;结合扩展运算符,filter做交/并集

数值扩展

  • number.EPSILON
  • 二进制0b-八进制0o-十六进制0x
  • Number.isFinite() 用来检查一个数值是否为有限的
  • Number.isNaN() 用来检查一个值是否为 NaN
  • ES6 将全局方法 parseInt 和 parseFloat,移植到 Number 对象上面,使用不变。
  • Number.isInteger() 用来判断一个数值是否为整数
  • Math.trunc用于去除一个数的小数部分,返回整数部分。

ES6 模块化语法

export 命令用于规定模块的对外接口

import 命令用于输入其他模块提供的功能

class

一个语法糖

 //1.class 声明类
     class star{
         //构造函数
         constructor(name,age){
             this.name=name;
             this.age=age;
         }
         //方法,不准用 function
         do(){
              console.log('星星');
         }
         // static 定义静态方法和属性,属于'类'不是对象,实例对象的对象原型指向原型对象
         static light='true'
         //get:读取时调用set:写入时调用,可以用来数据单/双向绑定
         get name(){
              console.log('读取name'); 
         }
         set name(){
              console.log('写入name');
         }
     }
 let xxx=new star();
 //extends 继承父类
 class sun extends star{
      constructor(name,age,satellite){
          super(name,age);
          this.satellite=satellite;
      }
     //父类方法可以重写
      do(){
          //调用父类方法
     super.do()
              console.log('太阳');
         }    
 }

迭代器

遍历器(Iterator)就是一种机制。它是一种接口(对象里的属性),为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。主要供 for...of 消费

原生具备 iterator 接口的数据(可用 for of 遍历)

Array,Arguments,Set,Map, String,TypedArray, NodeList

注意!:没有object,object要么用foreach要么自定义Iterator 接口

 let arr=['何同学','丁真','谷爱凌']
 for (const iterator of object) {
     console.log(iterator); //'何同学','丁真','谷爱凌'
 }//原理:不断调用next方法,直到next为空

生成器

 function * gen(){
  yield '一只没有耳朵';
  yield '一只没有尾巴';
  return '真奇怪';
 }
 let iterator = gen();
 console.log(iterator.next());
 console.log(iterator.next());
 console.log(iterator.next());
  
 ​
 ​

  • 生成器函数返回的结果是迭代器对象,调用迭代器对象的 next 方法可以得到yield 语句后的值
  • yield 相当于函数的暂停标记,也可以认为是函数的分隔符,每调用一次 next方法,执行一段代码
  • next 方法可以传递实参,作为 yield 语句的返回值

Promise

重点:

  • Promise 构造函数: Promise (excutor) {}
  • Promise.prototype.then 方法
  • Promise.prototype.catch 方法

 const p=new Promise(function(resolve,reject){
    let data='数据';
      let err='失败数据';
     setTimeout(() => {
     resolve(data)//成功
          reject(err)//失败
 }, timeout);
 })
 //此时调用then方法
 p.then(function(value){
 console.log('成功数据value')//value是data
 },function(reson){
     console.log('失败数据reason')//reason是err
 })
 then返回值是Promise,如果不是Promise,值是返回值,状态是成功

Promise一共有三种状态: 未决定的:pending 成功:resolved、fulfilled 失败:rejected

Promise.prototype.catch 方法:抓住错误 参考:尚硅谷es6