关于 const 中定义的复合类型 为什么可以改变

1 篇文章 0 订阅
1 篇文章 0 订阅

对于 const 问题回答时:我会回答 const 定义的是一个只读的常量 而且定义的数据 不能改变 一旦声明变量必须马上初始化 同时没有变量提升、会造成暂时性死区、只在声明的块级({})作用中有效

const ac = "1";
		ac = 2; // 报错Assignment to constant variable.
		
if ('istrue') {
			const chunkNum = 1;
		}
		console.log(chunkNum); // chunkNum is not defined `在这里插入代码片`
console.log(b);  // Cannot access 'b1' before initialization
const  b = "2b"

这些我觉得我把 const 的这个声明的方式 说完了 但是又抛出来一个问题 const 中的声明的对象 可以修改吗? 有点蒙蔽 我会说 不会 因为声明的基本类型 number string 都是不行的 (其实或许在自己 不留意的时候 可能就这么去写过让 const 声明对象的代码 记不起来了而已 ) 但是答案是否定 可以去修改对象中的值 为什么可以做呢
const 本质上 又是什么呢 (其实大家如果好好读了 阮老师的es6阮老师es6知识整理 的文章 就能理解了 其实我看了好几遍 都没有认认真真的去看这个知识点 )
// 以下文字借鉴于 阮老师的文章
const 实质上保证的不是变量值不得改动 而是变量指向的那个内存地址所保存的数据不得改动 对于简单数据类型 值就保存在变量指向的内存地址、 对于复合类型 也叫引用类型(多用于 对象和 数组)变量指向的内存地址、保存的只是一个实际数据的指针、const 保证只是这个指针是固定的。它指向的数据结构 是不是可变的 就不受控制了

const objc = {
			}
			// 添加一个属性 name;
			objc.name = "李四"
			console.log(objc.foo) // "111"
			// 赋值为一个新的对象 
			objc = {};  // 报错 Assignment to constant variable.

上述代码中 变量objc 储存的是一个地址 (个人理解:也就是上面所说的指针) 这个地址是一个对象;
不可变的是这个地址,对象里面的数据 是可以变得.可以去添加属性 或者调用对象的方法 都是可以的;只要不改变对象本身 都是可以的。
说一个题外话(又不是很外…) objc = {} 报错的原因 不知道是不是 空对象 是不等于 空对象的 // {} === {} = false;如果对象本身相同的话 是不是可以理解为 对象本身并没有改变、、但是说过指针是固定的 所以还是不行。。
(希望可以对你学习 或者 面试有帮助)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值