1:const与let: const一般定义常量,不可再次修改定义的值,但是对于数组,对象这些引用类型是可以修改其属性的。与var的区别在于使用有变量提升,与块级作用域,且不会污染全局变量。let 用于定义变量,let与const都是不可以重复命名的,且没有了变量提升,如果在命名前调用会报错处理
2: 模板字符串 :使用``定义一个字符串 使用${}占位,代表一个变量,`你好${name}`,就不用去拼接字符串了
3:增强函数
1:外部动态传入函数参数个数,如果有的参数未传入时,该参数有默认值
function add(a,b=20){
console.log(a+b);
}
2:关于函数arguments属性,存储的是传入的参数,(与函数本体的参数个数是不相关的)存储的是函数被调用时传入的参数,对于剩余参数方法的使用
function add(a,...str)
{
}
...str表示对于传入的第一个参数外其他的参数会被包进数组str中
4:扩展运算符...的使用,一般是对于数组来说的...可以把数组里面的值进行分解。...[1,2,3,4]分解后1,2,3,4对于一些场景比较适用,还有对于箭头函数的使用,函数闭包 ,箭头函数的简写。箭头函数的注意事项,箭头函数是没有作用域链的,this的指向问题,this只能向上一层寻找。
5:结构赋值,用于对js对象和数组的结构
//对象的完全结构 let obj={name:'李华',age:'18岁'}
const {name,age}=obj;
const name1=obj.name;
//数组的完全结构 let arry=[1,2,[3,4],5];
let [a,b,[c,d],e]=arry
可以不完全结构,对于对象的结构如果只取一个参数,而又要保存剩余的参数的话可以使用...剩余运算符,那么剩余的属性会被包装成一个对象。
扩展的对象功能,常用的Object.assign()浅拷贝,可以将多个对象合并为一个对象
对于symbol的使用,表示独一无二的值,可以用来定义对象的私有属性。
6:对于Set与Map的使用,Set集合,里面的值是不会重复的,这是对于基本数据类型而言,如果存储的是对象或数组,集合的话,是没法判断值有没有重复的,可能底层是判断的哈希码,set里面的对象是不能被释放的,主要的方法就是add,delete,has(用来校验set里面是否有某个值)。Set初始构造时貌似只能接收数组作为参数。
将Set转为数组,可以在 [ ] 用...剩余运算符结构Set
Map:键值对 set(key,value)初始化Map传入的是二维数组
let map=new Map([[1,'2']]);
其他方法差不多与Set相似
7:数组,将伪数组转换为数组,可以使用扩展符... 也可以使用
Array.from(arry,(ele)=>{//ele代表伪数组每一项的值,可以在匿名函数里改变 })此方法可以接收两个参数 一个是伪数组,另一个是匿名函数。用来对数组每一项的处理
Array.of({},2,3,4,2,[])将传入的参数转换为一个数组
array.find(()=>{})接收的参数表示数组的每一项 函数体列书写条件,只有满足条件的第一个值会被返回,findIndex()则返回的是满足条件第一个值的索引
8:迭代器,迭代器 一个接口 用于快捷的访问数据 ,获取数组中的迭代器 [].[Symbol.interator]
迭代器的next()方法返回一个数据对象 对象中的属性done为布尔值,为true表示已经到了末尾了,
相当于数据库的游标
ES6提供的异步编程解决方法 promise Generator 与 async
9:生成器 Generator ,参考dva中的异步处理 ,本质是用来解决异步问题的,他所返回的是一个迭代器
基本写法
function *myGeneretor()
{
console.log('a');
yield my()
console.log('b');
yield my()
console.log('c')
yield my()
}
function my()
{
console.log('f')
}
let inter =myGeneretor()//返回的是一个迭代器
使用next控制函数内部执行 每一次调用next会执行到函数内部的yield处 一直往下执行
10:promise
基本写法自己可以封装promise函数
function myPromise(data)
{
//data外部传入的参数 自己进行定义
return new Promise((resolved,rejected)=>{
//进行异步处理 自己的处理逻辑
//需要返回 resolved表示成功 rejected失败
//根据自己的逻辑返回 成功或者失败
resolved('成功')
})
}//闭包处理
myPromise().then(
(val)=>{ console.log(val)},
(val)=>{//可以接收两个参数 第一个是成功处理,第二个人是失败处理}
)
三个状态 成功resolved 失败rejected 进行中pending
可以理解umi中的异步处理
Promise.all([])方法接收的是一个promise对象数组,是promise原型方法 返回的是一个promise对象,并行执行,then()方法表示只有promise对象数组中的所有对象都成功了才是成功,一旦有一个失败了就会执行失败方法
race()方法 设置请求超时,和超时后的处理
原型方法 rejected resolved (object)可以直接把一个对象转为promise对象 所返回的也是转换的object
11:async await的使用,相当于Generator 的语法糖
async标注在函数之前 这个函数返回的便是一个promise对象,await 等待,在函数中如果需要处理异步逻辑时 标注在表达式之前,只有该表达式完成后函数里面才会往下面进行执行 可以参考umi框架中对于异步请求函数的封装
基本写法
function fn()
{
//异步逻辑
return data;
}
async function myfunction() {
let data=await fn() //1+2//()=>{ setTimeout(()=>{return 200},2000)}//异步处理
return data;
}
myfunction().then((val) => {
console.log(`获得的的值${val}`)
})
12:模块化,实际用法参考react umi ,有两个关键字 import export 还有export default默认抛出
import 引入 如果引入的是一个模块的默认抛出 就不用结构赋值了 如果引入一个模块的抛出使用
import {} from '模块路径'
一个模块只有一默认抛出,可以抛出多个值
后序深度学习es6:https://es6.ruanyifeng.com/