const
const简介
在ES6中,我们可以使用const关键字来声明一个常量。常量一旦声明,其值就不能被修改了。
const和let非常相似,两者有着4个共同的特点:1只在代码块之内有效;2同一代码块中,不允许重复声明;3不存在变量提升;4不会成为window的属性。
const和let唯一的不同点:const用于定义一个常量,而常量是不允许重新赋值的
示例
const PI = 3.1415926
PI = 3.14
console.log(PI)
>>> Uncaught TypeError TypeError: Assignment to constant variable.
分析
賦值与声明是两个不同的概念,小以件们要区分清楚。1et所具有的特点,const都具有,我们可以把const看成增强版的let。两者的区别是:let可以重新赋值,但是const不可以。从语义上来说,如果想要定义常量,我们应该使用const,而不是使用let。
很多初学的小伙伴会有一个疑惑:为什么ES6要重新引入let和const这两个关键宇来代替var呢?其实,引入let和const正是为了解决ES5中使用var定义变量的不合理之处(这句话非常重要)。
深入了解const
我们所说的使用const声明的变量不能被修改,严格意义上说是保存变量值的内存地址不能被修改。用const声明的变量的值有以下两种情况。
- 如果该值属于“基本类型”,那么声明后是不允许修改该值的。
- 如果该值属于“引用类型”,虽然我们不能修改该值,但是可以修改它属性的值。
示例: 用const声明对象
const person = {
name: 'Jack',
age: '18'
}
person.name = 'Lucy'
console.log(person)
>>> {name: 'Lucy', age: '18'}
分析
从输出结果可以看到,person对象的厲性值确实被修改了。怎么理解这个现象呢?这是因为person对象是引1用类型的对象,person保存的仅仅是对象的指针。这就意味着,const仅仅保证指针不发生改变,修改对象的属性值不会改变对象的指针,所以是被允许的。
接下来我们尝试修改一下指针,让person指向一个新对象,看看结果又是怎样的。
示例: 让person指向一个新对象
const person = {
name: 'Jack',
age: '18'
}
person = {
name: 'Lucy',
age: 18
}
console.log(person)
>>> Uncaught TypeError TypeError: Assignment to constant variable.
分析
使用const声明一个对象,那么修改对象属性的值是被允许的,但是修改对象的值是不被允许的。const的这个特点非常重要,小伙伴们一定要理解清楚。
示例: 用const声明数组
const arr = ['red', 'green', 'blue']
arr[0] = 'orange'
console.log(arr)
>>> ['orange', 'green', 'blue']
分析
数组本质上也是一个对象,它的属性其实就是“、1、2...”。arr[0]='orange;表示修改0属性,所以也是被允许的。
可能有些小伙伴会问:“不是说const用于定义一个常量,而常量是不允许重新赋值的吗?为什么我们还可以修改这个常量的值呢? 其实这并不矛盾,我们此时修改的是这个常量属性的值并不是给这个常量重新赋值,两者的意思是不一样的。
最后要说明一点,既然学了let和const,那么以后在写Javascript代码的时候,我们就不要再使用var了,而是应该使用let和const
