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不,这段代码很无聊,你将一个变量设置为未定义,然后将另一个变量设置为空数组。然后你再做一次。注释中的内容并不代表实际结果,因此代码不相关。