1、const命令作用是声明一个不会变的常量
注意:一但声明,不可再改变这个值,而且在声明时就需要初始化好值。
<script>
const a = 'a';
const b; //error Missing initializer in const declaration
{
const c = 'c';
}
console.log(a); //a
console.log(b);
console.log(c); //error c is not defined
</script>
2、var、let、const的区别
- var关键字
- var作用域是函数级
- var存在变量提升,即可以先使用再定义
- let关键字:
- let作用域是代码块(花括号级的作用)
- let不存在变量提升,即要先定义再使用
- let不可以重复声明
const关键字
- const作用域是代码块(花括号级的作用),和let一样
- const不存在变量提升,即要先定义再使用,和let一样
- const不可以重复声明,和let一样
- const定义时就要初始好值
-
2、关于const“可变”
上面说了,const是定义常量不可变,但在很多情况下我们发现const却是“可变”的,如下代码:
<script>
const arrays = [1,2,3,4,5,6,7];
arrays.push(8);
console.log(arrays);
const set = new Set();
arrays.forEach(item=>{
set.add(item);
});
for(let item of set){
console.log(item);
}
console.log(set);
const user = {
name:'name',
age:18
}
user.age = 80;
console.log(user);
</script>
这是为什么呢?实际上这是因为const保证的不是变量的值不变,而是变量指向的那个内存地址所保存的数据不能改变。对于基本数据类型,值就保存在变量指向的那个内存地址,所以用const定义的基本数据类型的值是不能改变了,而对于数组和对象,它们属于引用数据类型,变量保存的只是一个指向实际数据的指针,而这个指针指向的内存地址才是真正保存数据的值的地方,所以const只能保证这个指针不能变,但不能保证他所指向的这个内存地址里面的值不能变。
ps:概括一下,基本数据类型,变量直接就保存了内存地址;引用数据类型,变量保存一个指针,指针指向内存地址。