javascript Array()方法的意外输出

neekobn8  于 2023-02-02  发布在  Java
关注(0)|答案(3)|浏览(113)

我有下面这段代码,但不太理解输出

function repeatStringNumTimes(str, num) {
  if (num <0) {
    return ""
  } else {
  return Array(num+1).join(str)
  }
}

console.log(repeatStringNumTimes("abc", 3));

我本来希望输出是“abcabcabc”,但如果我在JS Bin中使用console.log(repeatStringNumTimes(“abc”,3)),它会生成“abcabc”?
如果我指定数组(3)-它不会连接字符串3次吗?为什么在这个例子中只有2次?

ukdjmx9f

ukdjmx9f1#

如果我指定数组(3)-它不会连接字符串3次吗?为什么在这个例子中只有2次?

console.log([1,2,3].join('abc'))
// outputs 1abc2abc3

注意,'abc'是3个元素之间联接的分隔符,因此它出现两次,而不是3次。
因此,如果创建一个空数组,它将显示'abc'两次,分隔3个空字符串:

console.log(Array(3).join('abc'))
// outputs abcabc

另请注意,存在String.repeat()

console.log('abc'.repeat(3))
// outputs abcabcabc
dgiusagp

dgiusagp2#

看,当我运行你的代码时,正确的输出出现了,所以你的代码没有错误,当你指定Array(3)时,输出将是“abcabc”,你的代码运行良好

kx1ctssn

kx1ctssn3#

如果你看一下Array#join的文档,它会根据join方法中传递的分隔符来连接数组项。理想情况下,它不会考虑数组中第一个元素之前和最后一个元素之后的连接。

console.log(Array(3)) // [undefined, undefined, undefined]

console.log([undefined, undefined, undefined].join('abc')); // 'abcabc'

当你想用字符串填充数组时,Correct方法是Array#fill,它将数组中的所有元素都更改为静态值,从开始索引(默认为0)到结束索引(默认为array.length),然后在Array.join()方法的帮助下连接数组中的元素。

console.log(Array(3).fill('abc').join(''));

相关问题