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新增的他都能转化,使用的还需要小心一点,之前要测试哦;至于应用到项目里的高阶使用方法,以后再说····