function whatTheHeck(obj){
var arr = []
for(o in obj){
arr.concat(["what"])
}
return arr
}
whatTheHeck({"one":1, "two": 2})
concat函数完全没有起到任何作用。但是如果我在Firebug上在那一行设置一个断点并将该行作为监视器运行,它就可以正常工作。而且for循环会迭代两次,但最终arr仍然等于[]。
function whatTheHeck(obj){
var arr = []
for(o in obj){
arr.concat(["what"])
}
return arr
}
whatTheHeck({"one":1, "two": 2})
concat函数完全没有起到任何作用。但是如果我在Firebug上在那一行设置一个断点并将该行作为监视器运行,它就可以正常工作。而且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数组方法有点令人困惑的事情之一。一些方法会修改原始数组,而另一些则不会,没有命名约定来知道哪个方法会修改数组,哪个不会。你只需要阅读和学习哪些方法以哪种方式工作。
o
是否是在 obj
上“手动”设置的属性(即在 push 之前使用 if (!obj.hasOwnProperty(o)) continue;
)。 - Rob
return [].concat(["what"])
。世界上有些事情非常不对劲。 - Moss