1.定义
① 声明一个只读的常量。
②声明常量时一定要赋值,不然会报错,
const foo;
// SyntaxError: Missing initializer in const declaration
// 丢失了它的初始值
③ 声明的变量不得改变值 , 一旦声明变量,就必须立即初始化,不能留到以后赋值。
④只能同时声明和赋值 或先声明后使用
⑤ 声明的常量,也与let一样不可重复声明。
⑥既然是常量不能重新进行赋值,如果是基本数据类型,不能更改值,如果是复杂数据类型,不能更改地址值
总结Ⅰ:
ES6变量用 let 常量用const 都没有变量提升,④,都是块级作用域。
2.本质
①内存地址所保存的数据不得改动 ,
②对于值类型就保存在(栈里面)变量指向的那个内存地址 (堆和栈)
③ 对于复合(引用)类型的数据(主要是对象和数组 在栈里只有一个地址,都保存在堆里) 变量指向的内存地址
④ 只能保证这个指针是固定的
案例
Ⅰ:
const arr =[1,2,3];
consoLe. log(arr);
arr.push(4);//数组、对象可以扩展属性和方法consoLe.log(arr);//[1,2,3,4]
Ⅱ: 将对象冻结,应该使用Object.freeze方法。
const arr = Object.freeze([1,2,3]);//Object.freeze(对象)冻结对象的属性和方法
consoLe.log(arr);
arr.push(4);//报错,对象被冻结,不可以扩展属性和方法
consoLe.log(arr);//
总结Ⅱ:
① let、coAst、var的区别
- 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象
- 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升
- 使用const声明的是常量,在后面出现的代码中不能再修改该常量的值