const
是用来定义常量的,而且定义的时候必须初始化,且定义后不可以修改。这个想必都是常识了,但是有点需要注意的是声明引用类型和基本类型有点不同。用const
声明的基本类型一定是无法改变的,否则报错,但是对于引用类型,则稍有不同。废话不多说,直接上代码:
//修改基本类型
const str = 'hello';
str = 'hello world';
console.log(str); //Uncaught TypeError: Assignment to constant variable.
//修改引用类型
const arr = [1,2,3];
arr.push(4);
console.log(arr);//[1,2,3,4]
第一次遇到的是我看控制台的输出都懵逼了,不是说好的会报错吗?不是说const
声明的是无法修改的吗?好吧,于是去查了下文档。查自 ECMAScript 6 入门
const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const
只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
网友评论