ES6中神奇的const
2021-08-14 本文已影响0人
技术小王
小编在之前的文章更新过关于es6中,定义变量的关键字,let和const,今天在找资料的时候,发现了const定义变量的新特点,今天特来用一篇文章来记录下。大家还可以关注我的微信公众号,蜗牛全栈。
我们都知道const是用来定义常量的,定义之后不可以改变,但是这个不可改变,只限于基本数据类型。在用const定义后的基本数据类型变量,再改变的时候就会出现问题,比如
const num1 = 2
num1 = 3 // Uncaught TypeError: Assignment to constant variable.
对于引用数据类型,主要是数组和对象,会有这样“神奇”的现象
const arr = []
arr.push(666)
console.log(arr) // [666]
const obj = {}
obj.name = "lilei"
console.log(obj) // {name:"lilei"}
为什么const没有对他们一视同仁呢?究其原因还是因为基本数据类型,像Number类型、Boolean类型是存储在栈内存中,而引用数据类型,是存储在堆内存中,变量直接引用堆内存的地址。这也就导致了两种数据类型的拷贝情况完全不同。这也就解释了const定义的引用数据类型可以再次修改,因为变量一直指向在堆内存中的地址,即使数据改变了,但是地址没改变,所以引用数据类型,用const定义之后,也可以修改。又是离前端大神更进一步的一天,加油!