ES6基础语法

var let const

let,const  1.具有块级作用域  2.不具有变量提升  3.不允许重复声明
const  用于声明常量,必须赋初值,不允许重新赋值

箭头函数

  • 箭头函数,本质上,就是一个匿名函数
  • 箭头函数无法通过 call、apply、bind 来手动改变内部 this 指向
  • 箭头函数:自动 .bind(this) 也就是说箭头函数中的 this 指向与其所在作用域的 this 指向相同
let sum = (x, y) => {
    console.log(x + y)
}
sum(1, 6)

箭头函数的this继承于父级作用域

模板字符串

const name = 'Tiger';
const age = 13;
console.log(`My cat is named ${name} and is ${age} years old.`);

解构(对象和数组)

交换数值:
[a,b]=[b,a]

结构数组:

 let [a, b, c, d] = [1, 2, 3, 4];
        console.log(a);
        console.log(b);

数组拼接:

arr1=[1,2,3]
arr2=[1,2,3]
arr3=[…arr1,…arr2]

解构对象:

let luke = { occupation: 'jedi', father: 'anakin' };
let {occupation, father} = luke;
console.log(occupation);
console.log(father);

连接对象

let obj1={
    name:"123",
    age:18
}

let obj2={
    height:19,
    age:18
}

let obj3=Object.assign(obj1,obj2)
console.log(obj1)   // { name: '123', age: 18, height: 19 }
console.log(obj3===obj1)    // true

模块

暴露对象:

function sumThree(a, b, c) {

            return a + b + c;

            }

        export { sumThree };

    引入:

        import { sumThree } from 'math/addition';

如果是 export default={}
import sumThree from ‘math/addition’;

参数

es6支持设置默认值:

function addTwoNumbers(x=0, y=0) {

    return x + y;

}

rest参数

处理不定数目参数:
function logArguments(...args) {

   for (let arg of args) {

      console.log(arg);

      }
}

扩展运算符

可以展示数组:

 Math.max(...[-1, 100, 9001, -32]);

let cities = ['San Francisco', 'Los Angeles'];

let places = ['Miami', ...cities, 'Chicago']; // ['Miami', 'San Francisco', 'Los Angeles', 'Chicago']

promise

初始是 pending 状态,可以通过函数 resolve 和 reject,将状态转变为 resolved 或者 rejected 状态,状态一旦改变就不能再次变化。

var fs = require("fs")
//promise就是利用回调函数,来将原来的数据,转到promise对象上来解决
var promise = new Promise((res, rej) => { //res成功时调用,rej失败时调用
    fs.readFile("./1.txt", "utf-8", (err, data) => {
        if (err) {
            rej(err) //将错误导出
        } else {
            res(data) //将成功导出
        }
    })
})

promise.then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

promise 链式调用

let p1 = new Promise(res => {
    setTimeout(() => {
        res("p1")
    }, 3000)
})

let p2 = new Promise(res => {
    setTimeout(() => {
        res("p2")
    }, 2000)
})

let p3 = new Promise(res => {
    setTimeout(() => {
        res("p3")
    }, 1000)
})

p1.then(res => {
    console.log(res);
    return p2
}).then(res => {
    console.log(res);
    return p3
}).then(res => {
    console.log(res);
})

Promise.all和Promise.race

Promise.all
Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
需要特别注意的是,Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚。这带来了一个绝大的好处:在前端开发请求数据的过程中,偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题。

let p1 = new Promise((resolve, reject) => {
  resolve('成功了')   //必须要有成功的回调
})
let p2 = new Promise((resolve, reject) => {
  resolve('success')
})
let p3 = Promse.reject('失败')
Promise.all([p1, p2]).then((result) => {
  console.log(result)               //['成功了', 'success']
}).catch((error) => {
  console.log(error)
})
Promise.all([p1,p3,p2]).then((result) => {
  console.log(result)
}).catch((error) => {
  console.log(error)      // 失败了,打出 '失败'
})

Promise.race
Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。

let p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success')
  },1000)
})
let p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('failed')
  }, 500)
})
Promise.race([p1, p2]).then((result) => {
  console.log(result)
}).catch((error) => {
  console.log(error)  // 打开的是 'failed'
})


利用Promise解决回调地狱
var fs = require("fs")

function p1() { //通过函数来控制执行顺序
    return promise = new Promise((res, ref) => { //通过return ,函数p()才能.then
        fs.readFile("1.txt", "utf-8", (err, data) => {
            res(data)
        })
    })
}

function p2() {
    return promise = new Promise((res, ref) => {
        fs.readFile("2.txt", "utf-8", (err, data) => {
            res(data)
        })
    })
}

function p3() {
    return promise = new Promise((res, ref) => {
        fs.readFile("3.txt", "utf-8", (err, data) => {
            res(data)
        })
    })
}

p1().then(data => {
    console.log(data)
    return p2()
}).then(data => {
    console.log(data)
    return p3()
}).then(data => {
    console.log(data)
})

async

在这里插入图片描述

Async是Generator函数的语法糖

const fs = require("fs")
const promisify = require("util").promisify //用于改造现有异步API,让其返回PROMISE对象,从而支持异步语法
const readFile = promisify(fs.readFile)

async function run() {
    let r1 = await readFile("1.txt", "utf-8")
    let r2 = await readFile("2.txt", "utf-8")
    let r3 = await readFile("3.txt", "utf-8")
    console.log(r1)
    console.log(r2)
    console.log(r3)
}
run()

Generators(生成器)

// generator 原理
// Generator 是 ES6中新增的语法,和 Promise 一样,都可以用来异步编程

// 使用 * 表示这是一个 Generator 函数
// 内部可以通过 yield 暂停代码
// 通过调用 next 恢复执行

function* test() {
  let a = 1 + 2;
  yield 2;
  yield 3;
}
let b = test();
console.log(b.next()); // >  { value: 2, done: false }
console.log(b.next()); // >  { value: 3, done: false }
console.log(b.next()); // >  { value: undefined, done: true }

Set()

1.没有重复值的数组
2.不能通过索引来获取值

var list1=[1,1,2,2,3]
var list2=new Set(list1)
list1=[…list2]
console.log(list2) //Set { 1, 2, 3 }
console.log(list1) //[ 1, 2, 3 ]

symbol

ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。

Map()

Maps 和 Objects 的区别
一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值(包括对象)。

Proxy

Proxy 是 ES6 中新增的功能,可以用来自定义对象中的操作

  $(function () {
        let obj={
            number:""
        }
        let proxy =new Proxy(obj,{
            get(target,key){
                return Reflect.get(target,key)
            },
            set(target,key,newval){
                $("span").html(newval)
                $("input").val(newval)
                Reflect.set(target,key,newval)
            }
        })

        $("input").on('input',()=>{
            proxy.number=$("input").val()
        })
        // obj.number=12355        // 这个不会
        proxy.number=12355      // 这个才会触发set 
    })

Proxy 与 Object.defineProperty 对比

数组变化也能监听到
不需要深度遍历监听

Object.assign()函数的作用及用法,举例说明

可用于浅拷贝 assign

 let Person = {
            name: '123'
        }
        var person = {}
        Object.assign(person, Person) //浅拷贝
        person.name = "111"
        console.log(person === Person) //false
        console.log(person.name) //111
        console.log(Person.name) //123

fetch

返回的是一个promise

需要对返回的数据.then 两次

接收参数

fetch(url, {
  method: 'POST',
  headers: {
    "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  },
  body: 'foo=bar&lorem=ipsum',
}).then(res=>{
    return res.json()
})
.then(res=>{
    console.log(res)
})

默认不会自己带上 cookie

无法对400-500+的错误状态码,直接回应

async function fetchText() {
  let response = await fetch('/readme.txt');
  if (response.status >= 200 && response.status < 300) {
    return await response.text();
  } else {
    throw new Error(response.statusText);
  }
}

fetch()配置对象的完整 API

const response = fetch(url, {
  method: "GET",
  headers: {
    "Content-Type": "text/plain;charset=UTF-8"
  },
  body: undefined,
  referrer: "about:client",
  referrerPolicy: "no-referrer-when-downgrade",
  mode: "cors", 
  credentials: "same-origin",
  cache: "default",
  redirect: "follow",
  integrity: "",
  keepalive: false,
  signal: undefined
});
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值