es6新扩展
新增数据类型symbol()
定义两个数据,var a = symbol(‘a’);var b=symbol('b');console.log(a==b);//返回值为false,即使两个值一模一样,symbol创建的也是两个不同的值。
其最主要的作用是起到数据私有化。
如果我们定义一个构造函数function Person(name,gender){ this.name= name,this.gender=gender);var p1=new Person('莫涛‘,'男');console.log(p1.gender);/输出为男
一般的数据保护私有化,我们使用闭包,也就是
var Person =(function (){
var gender = ''
function P(name,gender){
this.name= name
gender=gender //传过来的值赋值给了上面的gender私有变量
}
P.prototype.getgender=function(){
return _gender
}
return P
})()
var p1 =new Person('莫涛','男')
console.log(p1) //输出 只有莫涛,男被赋值给了私有变量gender,这时就无法直接获取gender的值
console.log(p1.getgender()) //输出男,通过这种方式获取gender,保护了gender的值
es6提供了更简便的方式,使用Symbol来保护数据私有化
var Person =(function (){
var _gender = Symbol('gender')
function P(name,gender){
this.name= name
this[_gender]=gender //传过来的值赋值给了上面的gender私有变量
}
P.prototype.say=function(){
console.log(this[_gender])
}
return P
})()
var p1 =new Person('莫涛','男')
// p1.gender = 'asd'
console.log(p1)
console.log(p1.say())
即使他输出确确实实有一个Symbol(gender)属性,你去使用p.Symbol('gender'),它会输出undefined,因为symbol类型,即使完全一样,也不是同一个值。只能通过在内部构造函数的原型prototype中添加方法截取到gender值,这就起到了数据保护的功能,也比闭包更直观。
新增变量声明let const
var,let,const中
var声明预解析,可以先使用在声明,其他两个不行
let,const具有块作用域{},var没有
const常量定义,不能修改,其他两个可以
新增解构赋值
var arr=[1,2,3,4,5] var [a,b] = arr;//等同于 let a =arr[0],let b =arr[1]
var obj={bar:100,foo:200} var{foo:f,bar:b} =obj;//等同于新建了一个{f:200,b:100}的对象
解构赋值的最主要作用是从一个大的数据中提取出需要的部分重新定义一个值。
扩展运算符 ...
将一个数组或者对象前面加上...,就将其外层的衣服脱掉,形成参数的形式
var arr1=[1,2,3];var arr2=[4,5,6];return arr3=[...arr1,...arr2]//返回一个[1,2,3,4,5,6]的数组
字符串扩展
新增unicode表示法 '\u{1f602}' 就将unicode编码用花括号括起来
模板扩展,使用``反引号(tab键上面)将字符串括起来,可以保持原有的格式
变量表达式解析:'{1+1},他会显示为2
迭代器*
即只有含有symbol.iterator方法的对象才能进行for of迭代,迭代器的使用,使程序员更灵活操作编程
具体介绍查看:https://www.runoob.com/w3cnote/es6-iterator.html
箭头函数
一个匿名函数中function(){}可以简写为()=>{},如果前面的参数只有一个可以省略括号a=>{},如果函数体里只有一句话可以省略为a=>a++
常用于ajax中回调函数的调用。this.axios.get('https://www.jianshu.com/').then(res=>{})
函数扩展
函数中不确定会传多少参数的时候,以前是使用arguments对象,arguments自动接收参数为一个数组,所以不用写形参。
function arrPush(){
var arr = arguments[0]
for(i=1,i<arguments.length,i++)
arr.push(arguments[i]
}
var arr=[1,2,3]
arrPush(arr,'a','b','c')//返回[1,2,3,'a','b','c']
现在使用...newData获取后面的参数,newDate也是一个数组,用法一致,就是形参有改变
如:function arrPush(arr,...newDate)
set
类似数组,是无序的,无重复值的,可用于数组去重
var arr=[1,1,5,6,4,7,8,]
arr=[...new Set(arr)] //数组去重为[1,5,6,4,7,8]