ES6基础(2)-const

1、const声明的是常量,在声明的时候就必须赋值,否则报错

const a;   #报错:missing initializer in const declaration
const a=1;  #正常运行

2、一旦声明常量就不可再改变;

const  name = "小红”
const  name = "小明“
#报错:常量不能被修改

3、常量为引用类型的时候,可以修改该引用类型

const xiaoming = {
  age = 14;
  name = "xiaoming"    
}
console.log(xiaoming);
xiaoming.age = 22;
console.log(xiaoming);   #成功修改
xiaoming = {}        #报错

 原因:const的常量的value是引用类型的时候,value是引用类型的内存地址,而非实际内容;只要保证引用地址没有改变就不会报错

4、const的特性

  • let声明的变量只在当前(块级)作用域内有效;
  • let声明的变量不能被重复声明;
  • 不存在变量提升;

4、怎么解决引用类型(对象&数组)的常量可以被修改的问题:object.freeze()    #冻结引用类型,此时常量为引用类型的话,也不会再修改了

const xiaoming = {
  age = 14;
  name = "xiaoming"    
}
xiaoming.freeze();
console.log(xiaoming);    #age = 14
xiaoming.age = 22;
console.log(xiaoming);      #age = 14(因为被冻结,所以修改不生效)

5、ES6之前怎么声明常量

1、假装是常量:
var xiaoming = "#ff0000"

在对象上添加属性:
Object.defineProperty = {obj,’属性名‘,属性描述}
例如:
var CST={};
Object.defineProperty = {CST, 'BASE_NAME', {
    value: 'xiaoming';    #属性的值
    writeable:false;      #属性不能被修改了  
}  
Object.seal(CST);  #包裹常量后,常量若为引用类型的话,此时无法再扩展,但可以修改当前属性值,相当于ES6中的freeze()的一半的功能;

  

posted @ 2020-11-16 23:27  风露  阅读(92)  评论(0编辑  收藏  举报