出于某种原因,这个功能:
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对象而不是我最初传递给它的数组中指定的那个?
谢谢!
答案 0 :(得分:6)
JavaScript中对象的属性没有已定义的顺序。引擎可以任意方式自由订购,不同引擎在这方面可能表现不同。有关此行为的详细信息,请参阅此MDN article:
尽管ECMAScript使对象的迭代顺序依赖于实现,但似乎所有主流浏览器都支持基于最先添加的属性的迭代顺序(至少对于不在原型上的属性)...
因此,如果要在跨浏览器环境中模拟有序关联数组,则必须使用两个单独的数组(一个用于键,另一个用于值),或者构建一个单属性数组对象等。
如果您需要以特定顺序包含元素,我建议您重构代码以使用数组。