首页 > 编程知识 正文

es6对象新增方法,vuex的五个属性

时间:2023-05-05 00:29:38 阅读:8780 作者:4838

使用vuex的话,经常会遇到以下的写法。

.在不知道mapgetters('user '、['classList '、' class '、' subjectList '、' termList'] ) ES6的扩展运算符之前,对这种写法感到迷茫,什么是功能

数组的扩展算子概念

扩展运算符(spread )有三点)…。 这就像rest参数的逆运算,它将数组转换为一系列用逗号分隔的参数。 扩展运算符可以与常规函数参数结合使用,也可以将表达式置于后面,但如果后面有空数组,则没有任何效果。

let arr=[]; arr.push (…[ 1,2,3,4,5 ]; 控制台. log (arr; //1,2,3,4,5 ) console.log(1, [ 2,3,4 ],5 )/2 )3)4)5console.log (…) () ) ) //a控制台. log ([ . [ ],1]; //[1]意思

替代函数的apply方法

因为扩展运算符可以展开数组,所以不需要apply方法,而是将数组转换为函数的参数。

//ES5的写法math.max.apply(null,[ 14,3,77 ] )//ES6的写法math.max ) . [ 14,3,77 ]应用

复制数组

//ES5的写法consta1=[ 1,2 ]; const a2=a1.concat (; //ES6的写法consta1=[ 1,2 ]; const a2=[.a1]; const [.a2]=a1; 结合序列

//ES5的写法[ 1,2 ].concat (more ); ARR1.concat(ARR2,arr3); //ES6的写法[ 1,2, more] [.arr1, arr2, arr3]与构造赋值组合

//ES5的标记a=list[0],rest=list.slice(1)//ES6的标记) a, rest )=listhttp://www.Sina.com/

转换字符串

扩展运算符还可以将字符串转换为真数组,以正确识别4字节的Unicode字符。

' xud83dude 80y '.length//4[ . ' xud83dude 80y ' ].length//3letstr=' x _ d83d _ de80y '; str.split ().reverse ).join ) )/y ) ude80 ) ud83dx )…str ).reverse ).join ) ) )/y

迭代器界面中的对象可以使用扩展运算符转换为真正的数组。 请参阅迭代器章节。

Map和Set结构,生成器函数

由于扩展运算符在内部调用数据结构的迭代器接口,因此任何具有迭代器接口的对象都可以使用扩展运算符,如Map结构。 letmap=newmap([1,' one ',[2,' two ',[3,' three'] ',] ); letarr=[.map.keys(]; //[ 1,2,3 ] generator函数运行时,将返回遍历对象,因此也可以使用扩展运算符。 constgo=function*({yield1; 颐德2; 颐德3; (; [.go () ]/[ 1,2,3 ] http://www.Sina.com /对象的扩展运算符的概念

对象的构造赋值用于从一个对象中获取值。 这相当于将目标对象本身的所有可遍历属性(enumerable )尚未加载的属性指定给指定对象。 所有键及其值都将复制到新对象上。

let { x,y, z }={ x: 1,y: 2,a: 3,b: 4 }; x //1y //2z //{ a: 3,b: 4 }注意:

如果等号右侧为undefined或null,则报告错误,因为等号右侧必须是对象才能求解赋值。

赋值必须是最后一个参数。 否则,将报告错误。

赋值的副本是浅副本。 也就是说,如果键的值是复杂类型的值(数组、对象或函数),则求解赋值副本是对该值的引用,而不是该值的副本。

let obj={ a: { b: 1 } }; let { .x }=obj; obj.a.b=2; x.a.b //2扩展运算符的构造赋值不能复制从原型对象继承的属性。

let o1={ a: 1 }; let o2={ b: 2 }; o2.__proto__=o1; let { .o3 }=o2; O3//{ b : } O3.a//undefinedconsto=object.create ({ x :y: 2 } ); o.z=3; let { x, newObj }=o; let { y,z }=newObj; x //1y //undefinedz //3let { x, { y,z}=o; //syntax error : mustbefollowedbyanidentifierindeclarationcontexts APP应用程序

扩展一个函数的参数,引入其他操作。

使用function baseFunction({ a,b } {/. } functionwrapperfunction { x,y, restconfig}{/x和y参数进行操作//其他参数为

let z={ a: 3,b: 4 }; let n={ .z }; n //{ a: 3,b: 4 }let aClone={ .a }; 在与//letaclone=object.assign({},a )相同的//上例中,我们只是复制了对象实例的属性,但如果要整个克隆对象,还会复制对象原型的属性//写法一const clone1=object.assign (object.create ) object.getprototypeof ),obj ); //写法2 const clone2=object.create (object.getprototypeof (obj ),object.getownpropertydescriptors ) )合并两个对象

let ab={ .a, b }; 将与//letab=object.assign({},a,b )相同的//用户自定义属性放在扩展运算符之后将复盖扩展运算符内部同名的属性。 let aWithOverrides={ .a,x: 1,y:}; let aWithOverrides={ .a, { x: 1,y:}; let x=1,y=2,aWithOverrides={ .a,x,y };//等同于letawithoverrides=object.assign (,a,)、{ x: 1、y: 2 } ); 修改现有对象节的属性。

letnewversion={ . previous version,name : ' newname '/overridethenameproperty }; 其他

如果将自定义属性放在扩展运算符之前,则将设置新对象的默认属性值。 与数组中的扩展运算符一样,可以在对象的扩展运算符之后添加表达式。 如果扩展运算符后面有空对象,则没有任何效果。 如果扩展运算符的参数为null或undefined,则忽略这两个值,并且不报告错误。 如果扩展运算符的参数对象中包含取值的函数get,则执行该函数。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。