JavaScript-在递归过程中,变量的类型从对象变为数字
我有一个函数,它将数字“number”按给定的次数推送到“output”数组。由于某种原因,在递归调用函数期间,“输出”数组变成了一个数字,因此push方法停止工作。有人能给我解释一下为什么“输出”变量的类型在递归过程中会发生变化吗JavaScript-在递归过程中,变量的类型从对象变为数字,javascript,arrays,recursion,Javascript,Arrays,Recursion,我有一个函数,它将数字“number”按给定的次数推送到“output”数组。由于某种原因,在递归调用函数期间,“输出”数组变成了一个数字,因此push方法停止工作。有人能给我解释一下为什么“输出”变量的类型在递归过程中会发生变化吗 function replicate(times, number, output) { if (output == undefined) output = []; if (times < 0) { return []; } else if
function replicate(times, number, output) {
if (output == undefined) output = [];
if (times < 0) {
return [];
} else if (times == 0) {
return output;
} else {
console.log(output, typeof output);
return replicate(times - 1, number, output.push(number));
}
}
//logs
//[] 'object'
//1 'number'
函数复制(次数、数量、输出){
如果(输出==未定义)输出=[];
如果(次数<0){
返回[];
}否则如果(次数==0){
返回输出;
}否则{
console.log(输出、输出类型);
返回复制(times-1,number,output.push(number));
}
}
//日志
//[]对象
//1‘数字’
“注意”返回数组的新长度,而不是数组。因此,您正在将一个数字作为output
传递给您的函数,然后将其记录下来
方法将一个或多个元素添加到数组的末尾,并返回数组的新长度
您可以使用concat()
而是,或者先推到阵列
else {
output.push(number);
return replicate(times - 1, number, output);
}
这是因为数组上push方法的返回类型是它的长度!永远不要这样做!应该是这样的:
function replicate(times, number, output) {
if (output == undefined) output = [];
if (times < 0) {
return [];
} else if (times == 0) {
return output;
} else {
console.log(output, typeof output);
output.push(number);
return replicate(times - 1, number, output);
}
}
函数复制(次数、数量、输出){
如果(输出==未定义)输出=[];
如果(次数<0){
返回[];
}否则如果(次数==0){
返回输出;
}否则{
console.log(输出、输出类型);
输出。推送(数字);
返回复制(次数-1,数字,输出);
}
}
function replicate(times, number, output) {
if (output == undefined) output = [];
if (times < 0) {
return [];
} else if (times == 0) {
return output;
} else {
console.log(output, typeof output);
output.push(number);
return replicate(times - 1, number, output);
}
}