Javascript 为什么我尝试克隆的对象没有按预期工作?

Javascript 为什么我尝试克隆的对象没有按预期工作?,javascript,reactjs,jsx,Javascript,Reactjs,Jsx,我正在尝试克隆对象props.messages.serverError;我分别尝试了以下三种方法: 1. let serverError= {...props.messages.serverError}; 2. let serverError = Object.assign({}, props.messages.serverError); 3. let serverError= JSON.parse(JSON.stringify(props.messages.serverError}));

我正在尝试克隆对象props.messages.serverError;我分别尝试了以下三种方法:

 1. let serverError= {...props.messages.serverError};
 2. let serverError = Object.assign({}, props.messages.serverError);
 3. let serverError= JSON.parse(JSON.stringify(props.messages.serverError}));
克隆对象后,我将原始对象设置为null,然后按如下方式记录克隆对象a:

props.messages.serverError = null;
console.log('serverError', serverError)

serverError也为空,而不是原始值,即使由于克隆,它现在应该占用与原始对象不同的内存地址。

我很惊讶您如何设置
道具的值<代码>道具是只读的。您直接更改该值,而无需任何
react
交互,这可能就是它更改实际值的原因。你可以试试这样的

让道具={
信息:{
服务器错误:404
}
}
让serverError={…props.messages};
log(“初始值”,serverError.serverError);
props.messages.serverError=500;
log(“更新后:(Props)”,Props.messages.serverError);

log(“更新后:”,serverError.serverError)我对该对象进行了双重克隆,它似乎起了作用:

let originalError = {...props.messages.serverError};
let serverError = {...originalError};
originalError = null;
props.messages.serverError = null;
console.log('serverError', serverError)

此处serverError现在具有原始值。

因为1和2不是深度克隆。不清楚3号怎么会有同样的问题。也许你应该展示实际的代码,这样我们就可以看到你在做什么。@espascarello使用Json.parse的第三种方法是深度克隆,但即使是浅层克隆,它也应该创建一个新的内存地址,以避免修改原始对象,而不是修改原始对象。控制台日志发出null的唯一方法是在克隆前输入对象为null。@请提供一个复制该问题的最小、完整且可复制的示例。这3个克隆应该可以工作fine@Smarticles101Protip:您可以使用
[mre]
生成指向的链接。这不会回答问题标题中的问题。“为什么这不符合预期?”