为什么JavaScript重新排序我的对象?

时间:2014-02-28 04:39:32

标签: javascript

出于某种原因,这个功能:

function returnDoubled (numArray) {
        var newObj = {};
        for (var i = 0; i < numArray.length; i++) {
            newObj[numArray[i]] = numArray[i] * 2;
        }
        return(newObj);
    }

    console.log(returnDoubled([0, 17, 3, 1, -1, 12, 7]));

在我的控制台中返回以下内容:

Object {0: 0, 1: 2, 3: 6, 7: 14, 12: 24, 17: 34, -1: -2} 

对我来说似乎很奇怪。为什么JavaScript选择按此顺序排列newObj对象而不是我最初传递给它的数组中指定的那个?

谢谢!

1 个答案:

答案 0 :(得分:6)

JavaScript中对象的属性没有已定义的顺序。引擎可以任意方式自由订购,不同引擎在这方面可能表现不同。有关此行为的详细信息,请参阅此MDN article

  

尽管ECMAScript使对象的迭代顺序依赖于实现,但似乎所有主流浏览器都支持基于最先添加的属性的迭代顺序(至少对于不在原型上的属性)...

     

因此,如果要在跨浏览器环境中模拟有序关联数组,则必须使用两个单独的数组(一个用于键,另一个用于值),或者构建一个单属性数组对象等。

如果您需要以特定顺序包含元素,我建议您重构代码以使用数组。