为什么我的对象的这些属性在 for in 循环期间未定义?

Why are these properties of my objects undefined during a for in loop?

我想弄清楚为什么这段代码不会记录实际的 属性 值,而是一遍又一遍地记录未定义的值,即使我认为我创建了 属性 'random' 在每个对象中并用 Math.random().

给它一个值
var students = [{id:'1'}, {id:'2'}, {id:'3'}, {id:'4'}];


sortStudents(resetRandom(students));

function resetRandom(ary) {
    for (var i = ary.length - 1; i >= 0; i--) {
        ary[i]['random'] = Math.floor(Math.random()*10000);
    };
    return ary
}

如果我 console.log() 调用 resetRandom(students) 后的学生数组,则 'random' 属性 在数组中的每个对象中定义为预期的数字。下面的函数是当我尝试记录 属性 时出现问题的地方,我只是未定义:

function sortStudents(ary) {

    for (var i = ary.length - 1; i >= 0; i--) {
        for(var key in ary[i]) {
            if (key === 'random') {
                console.log(ary[key]);
            }

        }
    };

}

改变

 if (key === 'random') {
                console.log(ary[key]);
            }

至:

 if (key === 'random') {
                console.log(ary[i][key]);
            }