Javascript正在改变只需要引用的变量

标签 javascript arrays web

我正在从引用对象中提取一些数据,并根据需要更改它,但由于某种原因,我的代码也在更改我引用的对象..

var obj = {name:"list of things", list:[{name:"thing", 1},{name:"other thing", 2}]};
function doStuff () {
    var ref = obj;
    for(var p=0;p<ref.list.length;p++){
        ref.list.splice(1,1);
    }
    return ref;
}

出于某种原因,当我在代码中使用此结构时,它会更改“obj”和“ref”。似乎无法弄清楚

最佳答案

示例中的 obj 不是一个对象,它是对内存中某个位置的对象的引用。这就是为什么当您执行 ref=obj 时,您会获得对同一对象的另一个引用,因此更改对象 ref 引用与更改对象 obj 相同 引用文献。

您想要做的是克隆您的对象,因此您最终会得到两个不同的对象。 StackOverflow 和整个网络上有一些关于克隆的很好的答案。请随意使用其中任何一个。

关于Javascript正在改变只需要引用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993701/

相关文章:

api - 如果要获取YouTube视频的缩略图URL,我应该使用 “videos” API还是 “thumbnails” API?

html - 关于 html <button> 标签

javascript - 尝试运行教程中的 Hello World 程序,但对话框不显示

javascript - NodeJS 中的一个 Heroku dyno 上的多个作业

javascript - 智能显示小数位?

javascript - 在合并对象的键中创建值数组

javascript - 迭代 NodeList 并移动其元素而不转换为数组的惯用方法是什么?

java - 遍历 Arraylist<String[]>

html - 表格标题与排序图像对齐

javascript - 通过解析 innerHTML 添加几个 css 属性