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

标签 javascript arrays function loops concatenation

function whatTheHeck(obj){
  var arr = []

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

  return arr
}

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

concat 函数完全无法执行任何操作。但是如果我在 Firebug 中的该行上放置一个断点并将该行作为 watch 运行,它就可以正常工作。 for循环迭代了两次,但最终arr仍然等于[]。

最佳答案

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 数组方法有点令人困惑的事情之一。有些修改原始数组,有些则不修改,并且没有命名约定来知道哪些修改,哪些不修改。您只需阅读并了解哪种方式有效即可。

关于javascript,这个函数怎么可能返回一个空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962953/

相关文章:

javascript - 使用 CocoonJS idtkscale 缩放 KineticJS Canvas

javascript - 具有与参数相同的函数的函数调用顺序。 Javascript

javascript - 方法未定义为函数(虽然定义为函数)

javascript - Firefox 或 JavaScript,计算 DOM

javascript - 如何从具有 id 的元素发送文本以在单击时起作用?

javascript - 防止底层 div 在 iOS Safari 中滚动

c++ - 如何声明指向二维数组的指针数组

javascript - Service Worker 缓存未将所有文件存储在数组中

javascript - 如何根据 bool Prop 和名称 Prop 对数组进行排序?

python - 从google新闻中抓取新闻