神的尾巴

全栈工程师、独立开发者

0%

js中const常量对象能否修改对象属性

在我们的印象中,const是用来定义常量的,定义后不可修改。

假如面试官问你:javascript 中 const 常量是否能修改对象属性?

我想大部分人会脱口而出:不能修改。

那实际情况是怎么样的呢?我们来测试下。

1
2
3
4
5
6
// 定义测试常量t
const t = {}
// 对测试常量进行添加一个新的属性t设置值为't',发现没有报错
t.t = 't'
// 打印t,发现已经赋值成功
console.log(t)

奇怪?为什么和我们预想的不一样呢?

我们知道在 javascript 中存在基础类型和引用类型。

基础类型如常见的整数、字符串、浮点数等,引用类型包括对象、数组等。

针对基础类型,常量保存的是具体的值,但是针对引用对象,常量仅保存该对象内存区域地址(指针)。

所以在修改引用类型常量时,如果只修改内存区域内容,不修改指针不会影响常量储存的内存区域地址(指针),故不会报错。

但是如果修改了指针引用,即使不修改对象内容,也会报错,如下:

1
2
3
4
const t = {}
t.t = 't'
// 此处报错,不能修改常量
t = {t: 't'}
觉得对你有帮助的话,请我喝杯咖啡吧~.