AngularJS - 为什么$ scope.property的值在更改引用它的变量时会发生变化

时间:2013-03-20 19:33:54

标签: javascript angularjs

所以我通过将其定义为另一个变量$scope.property的值来复制var query,当我更新var query的值时,它会更改$scope.property的值}。

为什么会发生这种情况,我该如何避免这种情况?

我的代码看起来像这样:

var query = $scope.property;
if(condition) {
    console.log($scope.property);
    $.extend(query, anotherObj);
    console.log($scope.property);
}

控制台中的输出如下所示:

> Object {details-type: "order", details-bind_date_formatted: "03/19/2013"}
> Object {details-type: "order", details-bind_date_formatted: "03/19/2013", details-state: "CA"}

我从未在vanilla javascript中遇到过这个问题。

2 个答案:

答案 0 :(得分:2)

  

为什么会发生这种情况

您注意到query === $scope.property?两者都引用完全相同的对象,您可以在两个日志语句之间进行更改。

  

我该如何避免这种情况?

你想如何避免这种情况?你期望query成为对象的克隆吗?然后,请参阅How do I correctly clone a JavaScript object?What is the most efficient way to deep clone an object in JavaScript?

  

我从未在vanilla javascript中遇到过这个问题。

不太可能,因为jQuery只是由vanilla JS构建的:

var scope = {a:{b:1}};
var a = scope.a;
console.log(scope.a); // or just log(a);
a.c = 0; // or scope.a.c = 0;
console.log(scope.a); // or just log(a);

答案 1 :(得分:2)

var query = angular.copy($scope.property);