[英]javascript magically inserting an empty var into a new array / changing its length?
所以我有一段這樣的代碼:
this.convertParametersToGroups = function (nodes) {
self.selectedParametersGroup([]);
var emptyParametersList = [];
var pos = 0;
var group;
var tempParametersGroup = [];
// tempParametersGroup: Array[1]
// 0: undefined
$.each(nodes, function (key, val) {
emptyParametersList.push(0);
group = self.convertNodeToParameterGroup(val);
group.position = pos;
tempParametersGroup.push(group);
pos++;
});
self.selectedParametersGroup(tempParametersGroup);
return emptyParametersList;
};
我對聲明重新排序時,注釋的結果不會改變。 當我在$ .each循環中有“組”時,在執行回調中的第一條語句之前,它會在第一次迭代中插入一個未定義的值。
但是,當我像這樣更改他們的名字時:
this.convertParametersToGroups = function (nodes) {
self.selectedParametersGroup([]);
var emptyParametersList = [];
var pos = 0;
var g;
var tempParametersGr = [];
// tempParametersGr: Array[0]
$.each(nodes, function (key, val) {
emptyParametersList.push(0);
g = self.convertNodeToParameterGroup(val);
g.position = pos;
tempParametersGr.push(g);
pos++;
});
self.selectedParametersGroup(tempParametersGr);
return emptyParametersList;
};
它的作用與注釋相同。 好像javascript以某種方式將“組”名稱映射到數組的“組”后綴並將其插入或強制長度增加。 我是否缺少某些已知的語言功能或...?
您可以嘗試通過這種方式進行調試,應該很清楚何時將未定義實際添加到數組中:
function makeClone( arr ) {
return JSON.parse( JSON.stringify( arr ) );
}
this.convertParametersToGroups = function (nodes) {
self.selectedParametersGroup([]);
var emptyParametersList = [];
var pos = 0;
var group;
var tempParametersGroup = [];
console.log( "before loop", makeClone( tempParametersGroup ) );
$.each(nodes, function (key, val) {
console.log( "before iteration", key, makeClone( tempParametersGroup ) );
emptyParametersList.push(0);
group = self.convertNodeToParameterGroup(val);
group.position = pos;
tempParametersGroup.push(group);
pos++;
console.log( "after iteration", key, makeClone( tempParametersGroup ) );
});
console.log( "after loop", makeClone( tempParametersGroup ) );
self.selectedParametersGroup(tempParametersGroup);
return emptyParametersList;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.