JavaScript中的对象值和对象数组
Objects value and object arrays in JavaScript
我正在AngularJS中开发一个web应用程序。我对JavaScript中的引用感到困惑。对象上的更改何时会影响其引用?
例如,我的应用程序中有一个控制器。我用那个控制器上传文件并把文件信息保存在工厂里。
$scope.fileArray = [];
...
...
uploadFiles(file){
$scope.fileArray.push(file);
..
..
//on success
file.params = data["parameters"]; //an array of strings about file path and name
...
...
}
在uploadFiles函数中,我将文件对象推送到fileArray中。然后,当我更改或添加新属性到文件对象时,我可以在fileArray中看到这些更改。
var fileInfo = {
infoArray : $scope.fileArray
}
fileFactory.keepFileInfo(fileInfo);
然后我把那个阵列放在工厂里。但$scope.fileArray上的这一时间变化并没有反映在工厂中。这里的逻辑是什么?
编辑
我错了。控制器对象的更改也会影响工厂。我写这个最小的应用程序是为了清楚地看到它,在我的应用程序中,我一定在其他地方犯了错误。
var testApp = angular.module('testApp', []);
testApp.controller('TestController', function($scope, TestFactory) {
$scope.fileArray = [];
var files = [];
files[0] = {
parameters : {
name : 'file1.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[0]);
files[1] = {
parameters : {
name : 'file2.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[1]);
files[2] = {
parameters : {
name : 'file3.txt',
path : "user/files"
}
}
$scope.fileArray.push(files[2]);
TestFactory.setFileArray($scope.fileArray);
files[0].parameters["name"] = "changed file name";
console.log($scope.fileArray); //here writes "changed file name"
console.log(TestFactory.getFileArray()); //here writes "changed file name", too
});
testApp.factory('TestFactory', function() {
var factory = {};
var fileArray = [];
factory.setFileArray = function(files) {
fileArray = files;
}
factory.getFileArray = function() {
return fileArray;
}
return factory;
});
让我们考虑以下示例:
var a = {};
var b = {c: a};
console.log(a === b.c);
a.d = {};
console.log(b.c);
如果你有一个对象变量,并将另一个对象的成员分配给它,那么它们有相同的引用,所以如果你更改其中一个,另一个也会更改。如果你对数组这样做,情况也是一样的:
var a = {};
var b = [a];
console.log(a === b[0]);
a.d = {};
console.log(b[0]);
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序