Javascript const 失灵?关于 Data types九州酷游

1. 为什么里面的值变了?

2.不是用 const 了吗?

3.说好的宣告后不可更改的特性失灵了吗?

原来这些跟data types有关~~下面帮忙你们做整理:

一、Data Types 分两类

酷游小天使kuk3219ⓥ提供(转出&分享需标示):根据储存位置不同,可以分成 Primitive Types & Reference Types(或者可以说 Primitives & Objects)

Primitive Types 的值储存在 Call Stack,而 Reference Types 的值储存在 Heap

二、Data Types 储存方式

Primitive Types

1.宣告age = 30,JS engine 会在 Call Stack 上创造一个 age identifier

2.age identifier 指向存着「30」的「Stack memory address」

3.接着宣告oldAge = age,JS engine 会在 Call Stack 上创造 oldAge identifier

4.oldAge identifier 指向与 age identifier 同一个 「Stack memory address」

5.接着重新为 age 赋值age = 31,已存在的 age identifier 会重新指向存着「31」的「Stack memory address」

6.所以 log 时,age与oldAge都有它们各自指向的值

 

Reference Types

1.宣告me = {...},JS engine 会在 Heap 创造出存着「物件值」的「Heap memory address」

2.然后 Call Stack 上会创造 me identifier

3.me identifier 指向存着「Heap memory address值」的「Stack memory address」

4.而这个「Heap memory address值」会指向 Heap 中的 「Heap memory address」,进而对应到「物件值」

5.接着宣告friend = me,Call Stack 上会创造 friend identifier

6.friend identifier 指向与 me identifier 同一个 「Stack memory address」,有着同样的「Heap memory address值」指向 Heap 中的 「Heap memory address」,对应到同一个「物件值」

7.这时若对friend进行修改 ex.friend.age = 27,将会修改到 Heap 中的「物件值」

8.所以 console.log(me.age)时,也将会是 27, 因为me与friend是指向同一个「物件值」

三、const 没有失灵!

理解两种 Data Types 的储存方式,就会发现用 const 宣告的 object(Reference Types),如果只是改变

object 中的值,它在 stack 中的指向确实没有改变(都是存着「Heap memory address值」的「Stack memory address」)!但如果我们在宣告 object 后,重新赋值新的 object,就不行啰!

 四、如何复制出新 object,而不是指向同一个?

 使用Object.assign!  

⬇️ 合并两个 object,创造新 object

⬇️ 这两个变数最终指向不同的「Heap memory address」

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值