Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的对象引用比较_Javascript_Reactjs_Redux_React Hooks - Fatal编程技术网

JavaScript中的对象引用比较

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中,==比较它们是否是完全相同的对象(表示内存中的相同

我最近试图深入了解ReactJS和Redux在何时更新钩子方面的工作原理

想想我做的游戏:

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