let和const
var:
1.  var可以重复声明
   2.  作用域:全局作用域和函数作用域
   3.  会进行预解析
let:
1.  同一作用域下不可以重复声明
2.  作用域:全局作用域和块作用域{}
3.  不会进行预解析
const:
1. 只能声明一次,且必须直接赋值
   2. 作用域:块级作用域
   3. 不会被预解析
   4. 不能重新赋值
解构赋值
对象的解构赋值
1  | let obj = {  | 
数组的解构赋值
1  | let arr = ["a","b"];  | 
怎么快速交换两个值(用到解构赋值)
1  | let a=1;  | 
字符串的解构赋值(没啥用)
1  | let str = "abc";  | 
展开运算符(…)
扩展:
1  | let arr1 = [1,2,3,4];  | 
剩余参数
1  | let arr1 = [1,2,3,4];  | 
以上用法在对象中依然适用,就不再赘述
解决浅复制问题
如果let arr2=arr1
这样直接赋值的话会造成在我修改arr2时,arr1也变了
但如果我用扩展运算符就可以完美避开这个问题
1  | let arr1=[1,2,3,4];  | 
Set
数组去重
1  | let arr = [1,2,3,2,1,4,5];  | 
Map
1  | let arr = [  | 
箭头函数
箭头函数:
形参=>返回值
1  | let fn=num=>num*2;  | 
(形参,形参)=>返回值
1  | let fn=(num1,num2)=>num1+num2;  | 
()=>返回值
1  | let fn=()=>"返回值";  | 
()=>{
执行语句
return 返回值(可选)
}
1  | let fn=()=>{  | 
(形参)=>{
执行语句
return 返回值(可选)
}
箭头函数不能用不定参(arguments)
但可以用扩展运算符解决(又叫rest参数)
1  | let fn = (a,b,...arg)=>{  | 
箭头函数本身没有this,当调用箭头函数的this时,指向其声明时作用域的this
参数默认值问题
1  | let fn = (a=2,b=10)=>{  | 
Array.from()
将类数组转换为数组
先康康啥是类数组,就是由下标,有值但他不是数组
1  | <li>1</li>  | 
1  | let lis=document.querySelectorAll("li");  | 
Array.from还有两个可选参数,一个是类似于map方法,另一个就是改变this指向(我觉得没啥用,就不记了)
1  | let lis=document.querySelectorAll("li");  | 
Array.of()
将传入的参数组成一个新数组
1  | console.log(Array.of(1,2,3,4,"a"));//[1,2,3,4,"a"]  | 
Array.isArray()
检测传入的是否是数组
arr.find()
返回数组中第一个满足判断条件的值,若没有就返回undefined
参数是一个回调函数
1  | let arr = [1,2,3,4];  | 
arr.findIndex()
除了这个返回的是索引值,剩下的和find方法一样
arr.flat(depth)
扁平化多维数组 depth指要提取嵌套数组的结构深度,默认值是1
当然,当你不知道数组有多少层的时候,可以直接传Infinity
返回“拉开的”数组
1  | let arr = [  | 
arr.flatMap()
在扁平化的同时想要进行一些操作,比如删除某一项时,可以使用此方法,参数是回调函数 but 这个函数只能处理一层,如果层数太多,需要递归
1  | let arr = [  | 
arr.fill()
填充作用,一般用于操作二进制
1  | let arr = [0,1,2,3,4];  | 
arr.includes()
判断数组中是否包含一个指定的值
1  | let arr = [1,2,3,4,5];  | 
字符串也有includes方法,用法和参数与数组的完全一致
str.startsWith() str.endsWith()
1  | let str = "肥肥肥最厉害";  | 
str.repeat()
将字符串重复多少次,不能太大数,比如几亿次啊,浏览器会撑不住
1  | let str = "a";  | 
模板字符串
插值表达式 ${} (取代字符串拼接中的+””+) , 里面的值只要是表达式即可,可以是函数调用啊,三目运算啊,都可以;首尾用
即可,取代了单双引,且其中可以任意换行而不报错
1  | let name = ()=>{  | 
对象的简洁表示法
1  | let a = 0;  | 
属性名表达式
1  | let name = "小明";  | 
Object.assign()
合并对象,两个参数(源对象,目标对象)
1  | let obj = {  | 
当然,我认为使用扩展运算符更方便一些,不需要考虑位置顺序
Object.is()
传两个参数,判断是否完全相等,和===类似,但是又有不同之处,具体如下
1  | Object.is(NaN,NaN);//true  | 
babel
1  | <head>  | 
上面只是平时简单的测试,用babel,可以将ES6转化为可兼容的,当然也不是所有ES6新增的他都能转化,使用的还需要小心一点,之前要测试哦;至于应用到项目里的高阶使用方法,以后再说····