为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 中的对象引用比较

JavaScript 中的对象引用比较

浮云间 2021-10-21 15:45:58
我最近试图深入了解 ReactJS 和 Redux 在钩子何时更新方面是如何工作的。考虑一下我所做的游戏:let state = { a: 1 };//action happens, but no change//comparisonconst prevState = state;state = state;const nextState = state;const equal = prevState === nextState ? "Yes" : "No";console.log("Action - no change. Are they equal?", equal);上面的例子很简单,都指向同一个对象。看下一个例子:let state = { a: 1 };//action happens, change in state//comparisonconst prevState = state;state = { ...state, b: 2 };const nextState = state;const equal = prevState === nextState ? "Yes" : "No";console.log("Action - no change. Are they equal?", equal);虽然现在比较如何对钩子起作用是有道理的,但不完全是为什么。我们正在改变状态,对象本身,但无论它得到什么值,它都会是相同的引用?那么我理解错了什么?是值的对象引用,还是声明,或两者兼而有之?
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

我们正在改变状态,对象本身,

不,那个代码不是。具体来说

state = { ...state, b: 2 };

分配一个新的、引用不同的对象,该对象使用 的前一个所指对象的属性进行初始化state

那条线并没有改变对象本身;它正在为单元格分配一个不同的对象引用state

要更改状态的内容,您可以执行

state.b = 2;

只要引用的属性state.b不作为自己的属性存在,它是可配置的,或者原型链上有一个 setter,它就会起作用。


查看完整回答
反对 回复 2021-10-21
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信