ES6

作者: 南崽 | 来源:发表于2020-02-27 17:45 被阅读0次

    历史

    ECMAScrit 是96年 网景公司吧javascript提交给 欧洲计算器制作联合会

    版本

    • 97年1.0
    • 98年2.0
    • 99年3.0(之前学js版本)
    • 2000年4.0 被和谐
    • 09年 5.0(很多新特性没有学)
    • 15年ES6正式确定

    前端框架与语言

    • js
    • jquery
    • angular
    • react
    • vue
    • typescript 趋势

    let与Const

    let 局部变量声明

    1. 只能在一对{}里面有用
    2. 不能重复声明
    3. 不会变量提升(在变量声明前访问会报错)

    const 常量声明

    1. 声明必须赋值
    2. 赋值不能修改(简单数据类型)
    3. 建议变量名 大小

    解构

    对象解构

    • 基本
    let {name,age} = {name:"abc",age:18}
    
    let{name:foo}={name:"abc"}
    foo 值就是 abc
    
    • 剩余值
    ...rest
    
    • 默认值
    let {name,age,weight=120} = {name:"abc",age:18}
    

    没有顺序,变量名必须要和对象的键名一致

    数组解构

    • 基础
    let[a,b] = [12,18];
    // a 12
    // b 18
    
    • 可以嵌套
    let[a,b,[c,d,e]] = [1,2,[3,4,5]];
    // c 3   
    // d 4   
    // e 5
    
    • 可以忽略
    let[a,,b] = [1,2,3];
    // a 1
    // b 3
    
    • 剩余值
    let [a,...rest] = [1,2,3,4,5];
    // rest[2,3,4,5]
    
    • 字符串
    let [a,b,c,d] = "中国加油";
    // a 中
    // b 国
    
    • 默认值
    let [a,b=20] = [30];
    // b 20
    // 如果解析出来的值是undefined 那么就用默认值代替
    

    字符串

    空白

    • trim()
    • trimLeft()
    • trimRight()
    • 去掉空白,左边空白,右边空白

    检测包含

    • includes(s)
      字符串是否包含s

    • startWith(s)
      是否以s开头

    • endsWith(s)
      是否以s结尾

    重复

    • repeat(n)
      将字符串重复n次

    填充

    • padStart(len,s)
      以s字符串补齐len长度 从前面补齐

    • padEnd(len,s)
      以s字符串补齐len长度 从后面补齐

    模板

    1.符号 ``
    2.可以在字符串模板里面任意换行
    3.单双引号 特殊符号不需要转义
    4.添加变量 ${变量名}

    var name = "abc";
    var age = 19;
    var str = `大家好,我的名字是${name},今年我${age}岁了`;
    

    数字

    • Number.isNaN()
      检测是不是NaN

    • Number.isInteger()
      是不是整数

    • **运算符
      2**3 == 2×2×2

    • Number.parseInt
      转化为整数

    • Number.parseFloat
      转化为浮点数

    数组

    迭代方法

    • forEach()
      遍历数组

    • map() 返回一个Array
      通过原来的数组映射出新的数据

    • filter() 返回一个Array
      如果遍历时返回的值为true 则最终返回时保留该元素;
      如果遍历时返回的值为false 则最终返回时过滤该元素;

    • reduce(function(a,b){}) 返回一个Any
      a参数是上一次遍历时的结果;
      b参数是当前遍历元素;

    • some() 返回一个bool
      如果遍历的值有一个返回值为true

    查找

    • find()
      查找数组中符合条件的元素

    • findIndex()
      查找数组中符合条件的元素的下标

    • flat(n)
      扁平化数组 n是扁平的层级

    • includes(el)
      查找数组是否包含el元素

    • fill(value,start,end)
      填充数组 value 填充值,start 填充开始位置,end 填充结束位置(可选)

    • copyWithin(rstart,start,end)
      从数组中拷贝内容替换
      restart 替换开始的位置
      start 拷贝的开始
      end 拷贝的结束

    函数

    箭头函数的特点

    1. => 左边是函数的参数
    2. => 右边是函数的执行语句 也是返回值
    3. => 如果参数不是一个用()包裹参数
    4. => 如果执行语句有多条用{}
    5. => 如果执行语句多条,返回用return关键字
    6. => 如果返回的是对象用()
    7. => this指向当前的指向环境

    默认参数

    function add(a=1,b=1){
        alert(a+b)
    }
    add(4,5);
    add();
    

    不定参数

    function add(...args){
        //args就是函数参数的数组列表
    }
    

    对象

    1. 对象的简写(变量名和对象的键一致时候)
    2. 对象属性的表达式[]
    3. 对象的拷贝合并 Object.create()
    4. 对象扩展:
    • {...a,...b}
      复制与合并对象

    map

    特点

    1. 有顺序
    2. 键名可以是任意类型
    3. size 长度

    初始化

    var map = new Map([[key,val],[key2,val2]]);
    

    方法

    • set(k,v) 设置
    • get(k) 获取
    • delete(k) 删除
    • has(k) 检测是否有

    属性

    • size 长度

    遍历

    for(let [k,v] of map2){
        //k 键名
        //v 值
    }
    

    转数组

    Array.from(map)
    

    展开合并

    [...map1,...map2]
    

    set

    不重复的数组

    初始化 new set([])

    方法

    • add() 添加
    • has() 检测
    • delete() 删除
    • clear() 清空

    属性

    • size长度

    转数组

    • [...set]

    • Array.from(set)

    for of ES6 新的遍历方法

    • 可遍历的有 Set Map Array String
    for(let [k,v] of map){}
    

    可迭代方法

    • keys() 键的集合
    • values() 值的集合
    • entries() 键与值

    定义: 创造实例对象的一个模板

    class 类名 {}

    class Animal{}
    

    constructor(){} 构造函数

    constructor(name,color){}
    
    new Animal("小乖乖","blue");
    

    say(){} 一般方法

    var d1 = new Animal();
    d1.say()
    

    static toName(){} 静态方法

    Animal.toName()
    

    静态属性

    static price = 100;
    
    Animal.price
    

    继承

    class 类名 extends 父类名 {}
    super()

    class Dog extends Animal{
        constructor(){
            super();
        }
    }
    

    getter setter

    1. 成对出现
    2. 不能够直接赋值 和 设置已经有的属性
    constructor(age){
        this.age = age;
    }
    
    get Age(){
        return this.age()
    }
    // d1.Age 调用大写的Age属性是会执行 get Age()这个函数返回的小写的age的值
    
    set Age(val){
        this.age = val;
    }
    // 当d1.Age=15抵用 set Age 这个方法最终设置的是小写的age的值
    

    模块

    1. 导出 export

    1. 基本
    export {name,age,fun,Animal}
    
    1. 使用as
    export {Animal as An}
    
    1. default 默认
    export default Animal;
    
    • 声明的时候导出 export default class Ball{}

    • 先声明 再导出
      class Ball{}
      export default Animal;

    2. 导入 import

    1. 基本
    import {name,age,fun,Animal} from "./xxx.js";
    
    import{An} from "./xxx.js";
    
    import 也可以使用as
    import {Animal as An} from "./xxx.js";
    var a1 = new An();
    
     import Animal from "./xxx.js"
    

    promise 承诺

    定义: 返回一个延期的承诺,用then来接受结果

    • resolve 解决(兑现)
    • reject(拒绝)

    作用

    1. 按顺序执行异步调用
    2. 避免回调函数 多层嵌套
    3. race 有一个resolve 就调用 then
      4.all 等所有结果都resolve 才调用then 方法

    基本写法

    new Promise((resolve,reject)=>{
        resolve(结果)
        reject(原因)
    })
    .then(
    res=>{//获取结果},
    err=>{//捕捉错误})
    .catch(err=>{捕捉错误})
    

    race

    Promise.race([多个异步调用])
    .then(res=>{返回的是最快resolve结果})
    

    all

    Promise.all([多个异步调用])
    .then(list=>{所有的resolve结果列表})
    

    generator 生成器

    定义

    • 遇到yield会挂起 暂停

    • 执行时候 next() 再次开始执行

    • 通常去做异步请求

    function * say(){
        yield "1";
        yield "2";
        yield "3";
    }
    
    var it = say();
    
    it.next() //{value:"1",done:false}
    
    it.next() //{value:"2",done:false}
    
    it.next() //{value:"3",done:true}
    
    it.next() //{value:undefined,done:true}
    

    async 异步

    await 等待

    异步编程

    function say(){return new Promise()}
    
    async function doit(){
        await say();
        await say();
        await say();
    }
    
    say()
    .then(res=>{return say()})
    .then(res=>{return say()})
    

    proxy 代理

    定义:可以对目标对象的读取调用...进行拦截

    1. 目标对象
    let target = {name:"abc",age:18};
    
    1. 处理
    let handler = {
        get(target,key){},
        set(target,key,value,receiver){}
    }
    
     let proxy = new Proxy(target,handler)
    

    处理函数

    • set
    • get
    • has()
    • ownkeys
    • apply
      ...

    Reflect 反射

    • 对象进行一些操作,方便 代码处理

    常用方法

    Reflect.ownKeys(obj) 
    // 获得对象键的列表
    Reflect.set(obj,key,value) 
    // 设置对象的值
    Reflect.get(obj,key) 
    // 获取对象的值
    Reflect.has(obj,key) 
    // 检测是否有某个值
    

    相关文章

      网友评论

          本文标题:ES6

          本文链接:https://www.haomeiwen.com/subject/yddxhhtx.html