JavaScript中的对象引用比较
我最近试图深入了解ReactJS和Redux在何时更新钩子方面的工作原理 想想我做的游戏:JavaScript中的对象引用比较,javascript,reactjs,redux,react-hooks,Javascript,Reactjs,Redux,React Hooks,我最近试图深入了解ReactJS和Redux在何时更新钩子方面的工作原理 想想我做的游戏: let state={a:1}; //行动发生了,但没有改变 //比较 const prevState=状态; 状态=状态; const nextState=状态; const equal=prevState==nextState?“是”:“否”; log(“操作-无更改。它们相等吗?”,相等)您正在尝试比较两个不同的对象引用。在Javascript中,==比较它们是否是完全相同的对象(表示内存中的相同
let state={a:1};
//行动发生了,但没有改变
//比较
const prevState=状态;
状态=状态;
const nextState=状态;
const equal=prevState==nextState?“是”:“否”;
log(“操作-无更改。它们相等吗?”,相等)代码>您正在尝试比较两个不同的对象引用。在Javascript中,==
比较它们是否是完全相同的对象(表示内存中的相同位置)
您正在执行第二个示例中的等效操作
const obj1 = {a: 1};
const obj2 = {a: 1};
obj1 === obj2; // False
它们永远不会彼此相等,因为它们位于内存中的两个不同位置
您可以在此处了解更多信息:您正在尝试比较两个不同的对象引用。在Javascript中,==
比较它们是否是完全相同的对象(表示内存中的相同位置)
您正在执行第二个示例中的等效操作
const obj1 = {a: 1};
const obj2 = {a: 1};
obj1 === obj2; // False
它们永远不会彼此相等,因为它们位于内存中的两个不同位置
您可以在此处阅读更多有关内容:
我们正在改变状态,物体本身
不,那个代码不是。具体地
分配一个新的、引用不同的对象,该对象使用状态
的前一个引用对象的属性初始化
这条线并没有改变物体本身;它将一个不同的对象引用分配给单元格状态
要更改状态的内容,可以执行以下操作
state.b = 2;
只要state.b
引用的属性不作为自己的属性存在、是可配置的,或者原型链上有一个setter,它就可以工作
我们正在改变状态,物体本身
不,那个代码不是。具体地
分配一个新的、引用不同的对象,该对象使用状态
的前一个引用对象的属性初始化
这条线并没有改变物体本身;它将一个不同的对象引用分配给单元格状态
要更改状态的内容,可以执行以下操作
state.b = 2;
只要state.b
引用的属性不作为自己的属性存在,或者是可配置的,或者原型链上有一个setter,它就会工作。state={…state,b:2}代码>创建一个新对象并将其引用指定给状态
。这意味着它将不是与prevState
相同的对象的引用。你在这里问的问题真的不是很清楚,很简单:在第二种情况下,你第二次构造一个对象。无论发生什么情况,对象文字总是表示一个新对象。请注意,如果您的状态
对象具有嵌套的非原语,如让状态={ob:{}}
,则在变异后prevState.ob==state.ob
代码>创建一个新对象并将其引用指定给状态
。这意味着它将不是与prevState
相同的对象的引用。你在这里问的问题真的不是很清楚,很简单:在第二种情况下,你第二次构造一个对象。无论发生什么情况,对象文本始终表示一个新对象。请注意,如果您的state
对象具有嵌套的非原语,如let state={ob:{}}
,则变异后的prevState.ob==state.ob
。