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

Javascript AngularJS-为什么$scope.property';s值在更改引用它的变量时发生更改,javascript,angularjs,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($scop

因此,我复制了一个
$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"}
控制台中的输出如下所示:

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中遇到过这个问题

为什么会发生这种情况

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

我怎样才能避免这种情况

你想如何避免这种情况?您是否希望
query
是对象的克隆?那就看看吧

我从未在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);
为什么会发生这种情况

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

我怎样才能避免这种情况

你想如何避免这种情况?您是否希望
query
是对象的克隆?那就看看吧

我从未在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);

我想复制这个对象,而不是引用它。我写javascript已经两年了。我不敢相信我到现在才注意到这一点。lolI想复制这个对象,而不是引用它。我已经写javascript两年了。我不敢相信我到现在才注意到这一点。Lol我是否应该将这个问题标记为与angular无关并且之前已经回答过?我是否应该将这个问题标记为与angular无关并且之前已经回答过?