javascript神奇地将空变量插入到新数组中/更改其长度?
我有一段代码如下:javascript神奇地将空变量插入到新数组中/更改其长度?,javascript,arrays,insert,var,Javascript,Arrays,Insert,Var,我有一段代码如下: this.convertParametersToGroups = function (nodes) { self.selectedParametersGroup([]); var emptyParametersList = []; var pos = 0; var group; var tempParametersGroup = [];
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;
};
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;
};
当我对声明重新排序时,已注释的结果不会更改。
当我在$.each循环中有“group”时,它在第一次迭代中插入了一个未定义的值,然后在回调中执行第一条语句
然而,当我像这样改变他们的名字时:
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;
};
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;
};
请显示相关代码,
group
不是特殊的关键字,两个代码片段中的结果是等效的。JS从不“神奇地”做任何事情。显示更多的代码。出于某种原因,它只是突出显示单词,它是一个变量的名称。这是所有相关的代码。@StefanZimecki我可以向你保证,它不是。@StefanZimecki不,这段代码很无聊,你将一个变量设置为未定义,然后将另一个变量设置为空数组。然后你再做一次。注释中的内容并不代表实际结果,因此代码不相关。