AngularJS-为什么$scope.properties's的值在更改引用它的变量时发生更改
AngularJS - Why does $scope.property's value change when changing a variable referencing it
所以我通过将$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);
相关文章:
- 为什么我会出现此错误"未捕获引用错误:未定义标题;
- 为什么我可以引用Javascript中尚未定义的变量
- 为什么firefox开发人员控制台引用script.js
- 为什么当我尝试将函数绑定到自身时,“this”对象仍然引用窗口
- 为什么引用 = null 不会影响引用的对象
- 为什么“exports”在nodejs模块中引用与“this”相同的对象
- 为什么在设置了OnPush标志的情况下,Angular2在更改检测过程中同时捕捉到引用更改和基元更改
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 为什么谷歌应用程序脚本抛出'引用错误:“;粗体“;未定义'使用.setBold()时
- 为什么可以't在创建新对象时引用旧对象
- 为什么对img标记的前向引用在Chrome上失败,但在FireFox和IE上有效
- 为什么jQuery's每个循环的函数都保存对元素对象的引用
- 为什么$().map生成循环引用
- 为什么将函数引用封装到匿名函数中可以更正'这'指向
- 为什么根据括号的位置来引用窗口或对象?并返回undefined
- 为什么茉莉花间谍不't通过引用解析函数对象
- 为什么Javascript库对数组方法(push,slice等)有本地引用
- 为什么我不能引用我的匿名函数
- 为什么对匿名函数的引用继续存在
- 为什么您可以在不引用“this”的情况下操作对象属性