这是一个常见的误解,您可以只使用它:
for (var currency in country) {
result += { ... something done with both currency and country[currency] ... };
}
这里的问题是哈希在 JS 中在技术上是无序的,因此您不能保证这些选项的顺序相同。
常见的替代方法是使用对象数组:
var countriesData = [
{
country: 'Sweden',
currency: 'SEK'
},
{
country: 'United States',
currency: 'USD'
}
];
for (var i = 0, l = countriesData.length; i < l; i++) {
result += { something of countriesData[i].currency and countriesData[i].country };
}
作为旁注,考虑一下这个......
var country = new Array();
country["SEK"] = 'Sweden';
country["USD"] = 'United states';
console.log(country.length); // wait, what?
... 并且 0 将被记录,而不是 2 - 正如预期的那样。同样,在 JS 中没有“类似 PHP 的关联数组”之类的东西:有对象和数组(从技术上讲,它们也是对象;typeof country
会给你 'object' 字符串)。
所以这就是这里发生的事情:你创建了一个Array
对象,它继承了Array.prototype
(例如length
)的所有属性,特别是。现在你用两个属性扩展这个数组 - 'SEK' 和 'USD'; 但这与使用push
或某些类似方法将这些字符串推入数组不同!这就是为什么它length
保持不变,引入混乱和混乱。)