Javascript 使用`for`vs`slice`的数组展平递归中的空值:为什么这两个函数的返回不同?

Javascript 使用`for`vs`slice`的数组展平递归中的空值:为什么这两个函数的返回不同?,javascript,arrays,recursion,interpreter,Javascript,Arrays,Recursion,Interpreter,下面我提供了两个代码片段,在我看来,它们应该做同样的事情。在第一个代码片段中,我得到一个“null”值。我想这是因为当我在[]上调用streamrollarray(arr[0])时,null值作为arr传递到函数中,将null值推到累加器中 我不知道的是,我希望我能得到一些帮助,是什么可能是一个优雅的方式来避免这个特定的问题 当输入相同时,我希望两个函数都给出相同的输出 作为一个辅助点:我想知道是否有人能给我指出一种基准测试的方法——这两种方法相互对比——这是我所不知道的,除了它是“一件事”这一

下面我提供了两个代码片段,在我看来,它们应该做同样的事情。在第一个代码片段中,我得到一个“null”值。我想这是因为当我在
[]
上调用
streamrollarray(arr[0])
时,
null
值作为
arr
传递到函数中,将null值推到累加器中

我不知道的是,我希望我能得到一些帮助,是什么可能是一个优雅的方式来避免这个特定的问题

当输入相同时,我希望两个函数都给出相同的输出

作为一个辅助点:我想知道是否有人能给我指出一种基准测试的方法——这两种方法相互对比——这是我所不知道的,除了它是“一件事”这一事实之外,这将有助于我理解如何做这样一件事,特别是如何解决这个问题

作为另一个辅助点:是否有一个交互式javascript解释器,与您获得交互式python解释器的方式相同(您可以在命令行中玩/测试东西)

版本1:“自然”递归-返回
[1,null,2,3]
函数数组(arr){
//我是蒸汽压路机,宝贝
//递归(是一个数组)
累计风险值=[];
if(数组isArray(arr)){
累加=累加concat(数组(arr[0]);
如果(arr.length>1){
累加=累加concat(数组(arr.slice(1));
}
}否则{
累计推力(arr);
}
返回累计;
}
console.log(
steamrollArray([1,[],[3,[[4]]]))

);版本1中,您正在推送
arr[0]
,而没有检查
arr[0]
中是否有元素。因此,在第二次调用
streamrollarray
时,您将传递一个空数组
[]
arr[0]
将是未定义的:

var arr=[];

console.log(arr[0])
“是否有交互式javascript解释器”--您是否尝试过在浏览器中按
F12
<代码>:)
(在Chrome中,您可能需要单击
控制台
选项卡。)@apsillers正是我要找的,谢谢!我知道chrome肯定有这样的功能。