javascript foreach如何与多维数组一起使用?

Jan*_*yka 4 javascript arrays

我正在玩一些javascript,并发现(至少对我来说)通过foreach循环处理多维数组时的奇怪行为.所以我有这段代码:

<script type="text/javascript">
  var arr = [['a', 'b'], ['c','d']];

  var first='';

  for (var singleArray in arr) {
    first += ' ' + singleArray[0] + ' ' + singleArray[1];
  }

  var second = '';
  for (var i=0;i<arr.length; i++) {
    second += ' ' + arr[i][0] + ' ' + arr[i][1];
  }

  console.log('First: ', first);
  console.log('Second: ', second);
</script>
Run Code Online (Sandbox Code Playgroud)

输出是:

First: 0 undefined 1 undefined
Second: a b c d
Run Code Online (Sandbox Code Playgroud)

我希望第一和第二将是相同的.你能解释一下我错过了什么吗?

注意:请不要建议通过jQuery或其他方式迭代数组.我没有编码麻烦,我只是对这种特殊情况感到好奇.谢谢!

Jan*_*yka 7

埃里克·米克尔森指出了一些好点,但总结如此.

  1. for (... in ...) 循环迭代对象属性
  2. array是Javascript中的一个对象,因此您可以使用它迭代一个数组.但它会慢一些,一般不推荐(看看为什么会这样)
  3. 迭代属性而不是值的事实意味着它返回索引而不是数组值(当你有关联数组时这可能很方便)
  4. 问题中的例子可以用for (... in ...)循环来解决

如下:

var third = '';
for (var arrayIndex in arr) {
  third += ' ' + arr[arrayIndex][0] + ' ' + arr[arrayIndex][1];
}
Run Code Online (Sandbox Code Playgroud)

在关联数组示例中,for (... in ...)循环将非常方便:

var person = [];
person["id"] = 1;
person["born"] = 2009;
person["favourite_meal"] = "chicken"; 

var fourth = '';
for (var arrayIndex in person) {
  fourth += ' ' + person[arrayIndex];
}
Run Code Online (Sandbox Code Playgroud)