ES6常用部分

ES6常用部分

ES6概述

ES6, 全称 ECMAScript 6.0
目前多数浏览器支持其大部分功能(基本最新浏览器都近100%)(不要跟我谈IE,我受不了它)
是js的标准,自2015年诞生

let 和 const

这两个关键字我们常常使用,之前我们没有了解ES6的时候相信也使用过

let

let关键字是块级作用域,只在声明的块级有效
和var相比,let 不存在变量提升,var 会变量提升
意思是var在运行时就产生,而let是在读取到声明行才产生
let只能声明一次,var可以声明多次

const

声明后必须赋值

const和let都有封闭性死区

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量之前使用它会报错

var a = 1;
if(a!=null){
	console.log(a)
	let/const a = 5;
}

解构赋值

基本

let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3

嵌套

let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3

可忽略

let [a, , b] = [1, 2, 3];
// a = 1
// b = 3

不完全解构

let [a = 1, b] = []; 
// a = 1, b = undefined

剩余运算符

let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]

字符串等

在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。

let [a, b, c, d, e] = 'hello';
// a = 'h'
// b = 'e'
// c = 'l'
// d = 'l'
// e = 'o'

但以上均不常用

(常用)对象解构

当你有一份json数据:

res{
	'code': 200,
	'user': {
		'userId': 1,
		'username': 'zhangsan'
	}
	'token':sakhdsdjhsafdjas.adshoajdaospdaohd.sdhaljdqpdeq
	'result': 'success'
}

我们想要拿到result就可以使用结构的方式

const {result:res} 

增加Map

和Java的map是一样的,但是无需指定泛型

const map = new Map()

在map中存储使用set方法
在map中取值使用get方法

map.set("token",token)
map.get("token")

foreach遍历

map.forEach(function(value, key) {
  console.log(key + " = " + value);
}, map)

set

set和Java也是差不多的,本质是无序去重数组

const set = new Set()

往里面添加元素使用add方法

set.add(5)
set.add("String")

类型转换

// Array 转 Set
var mySet = new Set(["value1", "value2", "value3"]);
// 用...操作符,将 Set 转 Array
var myArray = [...mySet];
String
// String 转 Set
var mySet = new Set('hello'); 
 // Set(4) {"h", "e", "l", "o"}

数组去重

var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}

函数

主要就是箭头函数(lambda)
单行

(var/let/const)函数名=(参数)=> 返回

多行

(var/let/const)函数名=(参数)=> {
	代码块
}

对象优化

新增Object.keys()取出对象的键

新增Object.values()取出对象的值

Object.entries()取出键值对

对象深拷贝

let user1={	
	username:"zhangsan",
	job:{work1:"外卖",work2:"司机"}
	}
let user2={...user1}

对象合并

let a = { name:'a' }
let b = { name:'b' }
let c = { name:'c' }
let d = {...a,...b,...c}

async await 进行异步处理(ES7)

async function name([param[, param[, ... param]]]) { statements }

    name: 函数名称。
    param: 要传递给函数的参数的名称。
    statements: 函数体语句。

async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
await 关键字仅在 async function 中有效。

let  doawait = (res)=> 1
 
async doAsync(){
   await doawait();
   console.log("2");
 }
doAsync();

先打印1
再打印2

上一篇:Vue3的新特性


下一篇:全新的 Vue3 状态管理工具:Pinia