2023.1.25今天我学习了let和const的区别。
相同点:
(1)只在声明所在的块级作用域内有效。
(2)不可重复声明。
(3)不提升,同时存在暂时性死区,只能在声明的位置后面使用。
不同点:
(1)声明不同
let声明的变量可以改变,值和类型都可以改变。
const声明的常量不可以改变,是一个固定值。
如:
let x = 3
x = 4
这是正确的,let声明的变量可以修改或者重新定义。
const x = 4
x = 5
这是错误的,因为const声明的变量是不可修改并且必须马上赋初值。
(2)地址不同
数组和对象等复合类型的变量,变量名不指向数据,而是指向数据所在的地址,const只保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个复合类型的变量声明为常量必须非常小心。
const arr = []
//报错,[1,2,3]与[]不是同一个地址。
arr = [1,2,3]
const arr = []
//不报错,变量名arr指向的地址不变,只是数据改变。
arr[0] = 1
arr[1] = 2
arr[2] = 3
console.log(arr.length);//3
若想让定义的对象或数组的数据也不能改变,可以使用object.freeze(arr)进行冻结,冻结指的是不能向这个对象或数组添加新的属性,不能修改已有属性的值,不能删除已有属性。
const arr = []
Object.freeze(arr)
//不报错,但是数据改变无效。
arr[0] = 1
arr[1] = 2
arr[2] = 3
console.log(arr.length);//0