1.变量声明
1.let、const、var
1.let声明变量只能作用于当前代码块,不能重复声明,不能被提前访问,未初始化默认为undefined
2.const声明常量只能作用于当前代码块,不能重复声明,不能被提前访问,声明时需要初始化
3.var声明变量可以作用于代码块外,可以重复声明,未初始化默认为undefined
3.Symbol数据类型
1.es6中新增加的一种数据类型了,为了防止字符串重复问题,一般用于对象的属性中
2.基本数据类型:Number、String、Boolean、Object、null、undefined、Symbol<br>
4.Map
1.Object只能接受String类型和Symbol作为key,Map可以接受其他数据类型
2.基本用法
1.初始化
1.map = new Map(); map.set(1,1);map.get(1);输出1
2.map = new Map([['name','zz'],['age',12]]);
3.其他方法
map.size,map.has(key),map.delete(key),map.clear()
4.遍历
map.keys(),map.values(),map.entries()都可以在for ...of循环中使用
5.数据类型转换
1.数组转map,需要二维数组<br>
map = new Map([['name','xx'],['age',12]])
2.map转对象,遍历map赋值给一个对象<br>
3.对象转map,遍历对象的keys赋值给map
4.map转JSON,JSON.stringify([...map])
5.JSON转map,new Map(JSON.parse(jsonstr))
5.新增加的数组操作
1.扩展运算符(...)<br>
[...[1,2],...[3,4]];输出[1,2,3,4]
2.数据过滤filter
arr=[1,2,3];arr.filter(item => item >2);输出新数组[3]
3.数据处理map
arr.map(item => item*2) 输出新数组[2,4,6]
4.forEach遍历
arr.forEach(item => console.log(item));
6.Set对象
1.Set类似于数组,成员值唯一
2.基本用法
1.set = new Set();set.add(1);for(item of set){console.log(item)}输出1
2.set = new Set([1,2,3]);
3.其他用法
1.set.size,set.delete(1),set.has(1)
4.遍历
set.keys(),set.values(),set.entries()都可以用于for...of
7.Proxy对象
1.Proxy对象可以用于修改对象某些操作的默认行为,相当于增加了一层拦截处理
2.常用的拦截操作
1.拦截get操作
proxy= new Proxy({m:1},{get: function(obj,key){console.log('obj',obj);console.log('key',key); return obj[key]}})
2.拦截set操作
s = new Proxy({},{set:function(obj,key,value){console.log('obj',obj);obj[key]=value}})
3.拦截apply操作,当目标对象是函数时,被调用就会被apply方法拦截
function sub(a,b){return a-b} handler={apply:function(obj,ctx,args){console.log('xx');return Reflect.apply(obj,ctx,args);} proxy=new Proxy(sub,handler); proxy(3,1);输出2,Reflect.apply(obj,ctx,args)方法是一个静态方法,可以调用目标对象函数
4.拦截has操作,当使用in命令判断是否有某个属性时被调用
proxy = new Proxy({name:'xx'},{has:function(obj,prop){return prop in obj}}) 'name' in proxy 输出true
5.拦截construct操作,当使用new命令创建对象时被调用
class Exam{constructor(name){this.name=name}} let handler ={construct:function(obj,args){return Reflect.construct(obj,args);}} let proxy=new Proxy(Exam,handler); obj = new proxy('xx'); 输出obj={name:'xx'}
6.拦截deleteProperty操作
proxy=new Proxy({},{deleteProperty:function(obj,prop){return Reflect.deleteProperty(obj,prop);}}) delete proxy.name;<br>
3.对proxy对象的操作实际上都是对目标对象上的操作
8.Reflect对象
1.Reflect对象的方法与Proxy对象的方法一一对应,Reflect的作用主要是实现的Object对象一些语言内部的方法
9.数值操作
1.Number.isFinite()检查数值是否有限,Number.isNaN(NaN)检查是否为NaN,Number.isInteger(1)检查是否为整数
2.Number.parseInt()将字符串转为给定进制的整数
1.Number.parseInt('11.11');输出11
2.Number.parseInt('0011',2);输出3
3.Number.parseFloat()将字符串转为浮点数
1.Number.parseFloat('12.21')输出12.21
10.Math对象扩展
1.Math.cbrt(1)计算立方根,Math.imul(1,2)计算两数相乘,Math.hypot(3,4)计算两数的平方和的平方根,Math.trunc(12.3)返回整数部分,Math.sign(1)判断正负号
11.ES6对象
1.对象字面量
1.const person={age:12,name:13}
2.方法名简写
1.x = {getName(){return 'xl'}}
3.属性名表达式
1.obj = {['he'+'oo'](){return 'xx'}}
4.对象扩展运算符,用于去除对象然后拷贝到当前对象
person={name:'mm'} someone={...person} 输出{name:'mm'}
5.Object.assign(target,source1,...)合并对象的属性到目标对象
6.Object.is()判断是否相等,基本类似于===
12.数组
1.Array.of()将参数作为元素形成数组
1.Array.of(1,2,3)输出[1,2,3]
2.Array.from()将类数组转为数组
1.Array.from([1,2])输出[1,2]
2.Array.from([1,2,3],(n) => n*2)输出[2,4,6]
3.find()查找符合条件的元素,返回第一个元素
1.[3,2,5].find(item => item >1) 输出3
4.findIndex()查找符合条件的元素,返回第一个元素的索引
5.fill(value,start,end)填充值
1.[1,2,3].fill(0,1,2);输出[1,0,3]
6.copyWithin(startTarget,startSource,startEnd,)范围性覆盖值<br>
[1,2,3,4].copyWithin(0,2,4);输出[3,4,3,4]
7.includes()包含指定值
[1,2,3].includes(2);输出true
8.嵌套数组转一维数组flat(n)指定转换层数
[1,[2,[3]]].flat()输出[1,2,[3]]<br>
2.[1,[2,[3]]].flat(Infinity)输出[1,2,3]