使用AngularJs的大型程序的一部分,代码片段:
var thePortList = $scope.ipPortList; // an array of objects
...
...
console.log("before", $scope.ipPortList, thePortList);
thePortList[i] = {};
console.log("after", $scope.ipPortList, thePortList);
创建此输出:
before [] []
after [2: Object] [2: Object]
我不知道为什么。我希望在多线程程序中看到类似的东西,但不能在Javascript中看到。
x = {}应该为数组中的该元素分配一个新的空对象。对?我对这种行为感到困惑。任何人都能解释一下吗?
在本地计算机和plunkr上测试Chrome。
Plunkr:
完整的plunkr控制台输出:Plunker Link
Event tracked Multipane Show Preview Toolbar undefined undefined
editor-0.11.1.js:2 URL visited /?p=preview
VM631:29 portList []
VM631:34 processing 0 [] undefined
VM631:39 skipping 0
VM631:34 processing 1 [] undefined
VM631:39 skipping 1
VM631:34 processing 2 [] undefined
VM631:45 before [] []
VM631:47 after [2: Object] [2: Object]
答案 0 :(得分:1)
这是一种正确的行为,我认为你误解了日志信息的含义。 您可以在控制台中尝试此代码,并查看结果:
var a=[];
a[2]={};
a
output: [undefined × 2, Object__proto__: Object]
控制台日志信息'[2:Object]'省略2 undefined,在JavaScript中如果为一个超出其长度的数组项赋值,如果尝试从原始长度访问元素到索引,并不是因为数组自动填充未定义,因为这是访问不存在的属性的标准响应。实际上,除了数组长度之外没有任何变化。