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

Mos*_*oss 19 javascript arrays loops concat function

function whatTheHeck(obj){
  var arr = []

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

  return arr
}

whatTheHeck({"one":1, "two": 2})
Run Code Online (Sandbox Code Playgroud)

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

jfr*_*d00 46

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

因此,您需要将功能更改为此功能,以确保其实际工作:

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

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

  return arr;
}

whatTheHeck({"one":1, "two": 2});
Run Code Online (Sandbox Code Playgroud)

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

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

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

  return arr;
}

whatTheHeck({"one":1, "two": 2});
Run Code Online (Sandbox Code Playgroud)

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