javascript,这个函数怎么可能返回一个空数组呢?

时间:2011-11-01 05:53:58

标签: javascript arrays function loops concat

function whatTheHeck(obj){
  var arr = []

  for(o in obj){
    arr.concat(["what"])
  }

  return arr
}

whatTheHeck({"one":1, "two": 2})

concat函数完全没有做任何事情。但是如果我在Firebug中的那一行放置断点并将该线作为手表运行它可以正常工作。并且for循环迭代两次,但最后arr仍然等于[]。

1 个答案:

答案 0 :(得分:46)

Array.concat创建一个新数组 - 它不会修改原始数组,因此您当前的代码实际上什么都不做。它不会修改arr

因此,您需要将功能更改为此功能才能确保其正常工作:

function whatTheHeck(obj){
  var arr = [];

  for(o in obj){
    arr = arr.concat(["what"]);
  }

  return arr;
}

whatTheHeck({"one":1, "two": 2});

如果您只想在阵列的末尾添加一个项目,.push()是一个更好的方法:

function whatTheHeck(obj){
  var arr = [];

  for(o in obj){
    arr.push("what");
  }

  return arr;
}

whatTheHeck({"one":1, "two": 2});

这是我发现Javascript数组方法有点混乱的事情之一。有些修改了原始数组,有些则没有,并且没有命名约定来知道哪些做什么,哪些没有。你只需要阅读并了解哪种工作方式。