ES6之常量和扩展运算符
栏目: JavaScript · 发布时间: 7年前
内容简介:ES5中通过改变属性描述符来达到常量的效果,我们可以将属性定义为只读。使用const定义数组是复合的数据类型,若直接复制,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。
1. ES5定义常量
ES5中通过改变属性描述符来达到常量的效果,我们可以将属性定义为只读。
Object.defineProperty(window,'PI',{
value:'3.14',
writable:false
})
2. ES6定义常量
使用const定义
const PI = 3;
3. ES5复制数组
数组是复合的数据类型,若直接复制,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。
var arr = [1,2]; var arr2 = arr; arr2[0] = 90; console.log(arr); //[90,2] console.log(arr2) //[90,2]
所以在ES5中,只能变通用concat方法复制
var arr = [1,2]; var arr2 = arr.concat(); arr2[0] = 10; console.log(arr); //[1,2] console.log(arr2); //[10,2]
4. ES6扩展运算符 ... (三个点)复制数组
对象中的扩展运算符可以这样理解:对象中的扩展运算符(...)用于取出参数对象中所有可遍历的属性,拷贝到当前对象中。
let arr = [1,2,3]; let arr2 = [...arr]; // [1,2,3]
假如给拷贝arr2时push一个元素:
let arr2 = [...arr,5]; console.log(arr2); //[1,2,3,5] console.log(arr); //[1,2,3]
可以看到只会改变arr2的值,而不会影响arr的值。同样改变arr的值也不会影响到arr2的值。
arr.push(12); console.log(arr); //[1,2,3,12] console.log(arr2); //[1,2,3,5]
所以,上述方法实际上等价于:
let arr = [1,2,3]; let arr2 = Object.assign([],arr); console.log(arr2); //[1,2,3] arr2.push(12); console.log(arr2); //[1,2,3,12] console.log(arr); //[1,2,3]
Object.assign方法用于对象的合并,将源对象所有的可枚举属性复制到目标对象。
注:Object.assign和扩展运算符(...),对一级属于属于深拷贝,对后面对级别属于浅拷贝。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Collective Intelligence
Toby Segaran / O'Reilly Media / 2007-8-26 / USD 39.99
Want to tap the power behind search rankings, product recommendations, social bookmarking, and online matchmaking? This fascinating book demonstrates how you can build Web 2.0 applications to mine the......一起来看看 《Programming Collective Intelligence》 这本书的介绍吧!