AngularJS-为什么$scope.properties's的值在更改引用它的变量时发生更改

AngularJS - Why does $scope.property's value change when changing a variable referencing it

本文关键字:引用 为什么 变量 properties AngularJS- scope      更新时间:2023-09-26

所以我通过将$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"}

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

为什么会发生这种情况

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

我该如何避免这种情况?

你想如何避免这种情况?您希望query是该对象的克隆吗?然后请参阅如何正确克隆JavaScript对象?或者用JavaScript深度克隆对象最有效的方法是什么?为此。

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

不太可能,因为jQuery只是由普通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);
var query = angular.copy($scope.property);