ES6总结

历史

ECMAScript 是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与Cont

let//局部变量声明
    1.只能在一对{}里面有用
    2.不能重复声明
    3.不会变量提升(在变量声明前访问会报错)
cont//常量声明
    声明必须赋值
    2.赋值不能修改(简单数据类型)
    3.建议变量名 大小

解构

对象

基本
let{name,age} = {name:"mumu", age:18}
let{name :foo} = {name: "mumu"}
    foo值就是mumu
剩余值
...rest
默认值
let{name , age , weight =120} = {name:"mumu",age:18,weight:130}
没有顺序,变量名必须 和对象名一致

数组

基础
let[a,b]=[12,18]
  a  12
  b  18
可以嵌套
let [a,b,[c,d,e]]=[1,2,[3,4,5]];
  c3 d4 e5
可以忽略
let[a, , b] = [1,2,3]
  a1 b3
剩余值
let [a, ...rest] = [1,2,3,4,5]
  rest[2,3,4,5]
字符串
let [a,b,c,d]="武汉加油";
  a 武
  b 汉
默认值
let [a,b=15]=[20];
  b=20
  如果解析处理的值为undefined那么就会用默认值替代

字符串

空白

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

检测包含

    includes(s)//查找字符串中是否包含s字符
    statsWith(s) //是否以s字符开头
    endsWith(s) //是否以s字符串结尾

重复

    repeat(n) //重复字符串n次
填充
    padStart(len , s)//以s字符补齐长度len从前面
    padEnd(len , s)//以s字符补齐长度len从后面
模板

1.符号 ``
2.任意换行
3.单双引号 特殊符号不需要转义
4.添加变量 ${变量名}

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

数字

Number.isNaN()//检测是不是NaN
Number.isInteger()//是不是整数
** 运算符
2**3 == 2x2x2
Number.parseInt
Number.parseFloat
转换为整数浮点数

数组

迭代方法
    forEach()//遍历数组

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

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

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

some() 返回一个bool
如果遍历的值有一个返回为true 最终返回结果为true
如果遍历的值所有返回为false 最终返回结果为false

every()
如果遍历的值有一个返回为true 最终返回结果为false
如果遍历的值有所有返回为false 最终返回结果为true
查找
    find()//查找数组中符合条件的元素
    findIndex()//查找数组中符合条件的元素 的下标
flat(n)

扁平化数组 n是扁平的层级

includes(el)

查找数组是否包含el元素

fill(value,start,end)

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

copyWithin(rstart,atart,end)

从数组中拷贝内容替换
rstart替换开始位置 start拷贝的开始位置 end结束位置

函数

箭头函数

箭头的简写

特点

1.左边是函数的参数
2.右边是函数的执行语句,也是返回值(语句只有一条)

            arr.forEach(item=>console.log(item));
            arr2 = arr.map(item=>item*2);

3.如果参数不止一个,要用()包裹

            arr3.reduce((a,b)=>a+b)

4.如果执行语句不止一条,要用{ }包裹

    arr.forEach((item,index)=>{
       console.log(item);
       console.log(index);
   })

5.执行语句不止一条,返回值要用return
6.如果返回的对象用()

            arr.map(item=>({pic:item}))

7.this 指向当前的指向环境

默认

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

不定参数

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

对象

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

map

特点

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

初始化

    var map2 = new Map([[key1,val1],[key2,val2]]);

方法

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

属性

    size长度

遍历

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

转数组

    Array.from(map)

展开合并

    [...map1, ...map2]

set

不重复的数组

初始化 new set([ ])

方法

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

属性 size 长度

转数组

    [...set]
    Array.from(set)

遍历for of

for(let v of s1){
  console.log(v);
}

for of

es6 新的遍历方法

可遍历的有 Set Map Array String

可迭代方法

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

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

class 类名 {}

    class Animal{ }

constructor(){}

构造函数

constructor(name,color){ }

new Animal ("小哥哥","blur")

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}

2.使用as

export {Animal as An}

3. default默认

export default Animal
声明的时候导出export default class Ball

先声明再导出

class Ball{}
export default Ball;

2.导入 import

1.基本

import {name,age,fun,Animal} from "./xx.js";

2.

import {An} from "./xx.js"

import 也可以使用as
import {Animal as An} from"./xxx.js";
var a1 = new An()

3. import Animal fom "./xxx.js"

Promise:承诺

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

resolve 解决 (兑现)
reject 拒绝

作用

1.按照顺序执行异步调用
2.避免回调函数 多层嵌套
race 有一个resolve就调用then
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:false}
    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:"yaya",age:18}

2.处理

let  handler ={
  get(target,key){},
  set(target,key,value,receiver){}
}

3. 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总结)