javascript - 为什么 JS 对象会有这样的行为?

标签 javascript json object

var alpha = { a: 0, b: 0 };
var beta= alpha;
beta.b = 1;

现在 alpha.b 为 1。

为什么会发生这种情况?我该怎么做才能保持 alpha.b 0?

最佳答案

alpha 和 beta 都是指向内存中相同内容的引用(即分配的堆)。因此,每当您更改一个对象的属性时,都会立即反射(reflect)在另一个对象上;因为它们本质上指向同一个对象。

您应该将所有属性从 alpha 复制到 beta

var alpha = { a: 0, b: 0 },
beta = { };

for(var prop in alpha){
     if(alpha.hasOwnProperty(prop)){
        beta[prop] = alpha[prop];   
     }
}

你的对象有点简单。您可能会遇到嵌套对象的情况,例如

var alpha = {
    propA: {},
    propB: {}
}

在这种情况下,您需要所谓的深度克隆;也就是说,您需要递归地克隆复杂的属性。

如果您已经在使用 jquery,则可以利用 extend 方法

 $.extend(true, beta, alpha)

关于javascript - 为什么 JS 对象会有这样的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21728975/

相关文章:

javascript - 将多个 PouchDB 数据库同步到一个 CouchDB 数据库

javascript - 访问 JSON 数组时出现问题

java - Android TextView 与来自 mysql 的数据?

javascript - 如何通过 css 颜色更改触发存储的属性?

javascript - 用于 Emberjs 的 Nodejs 的 RESTful API

javascript - 我可以将 gulp 任务标记为开发人员不可运行吗?

javascript - JSON 路径 : Outputting value plus parent hierarchically

javascript - 加载 json 列表并处理它

java - 无法转换为 [Ljava.lang.Object;

c# - 如何修复此错误 : Cant remove object from a list?