javascript数组join()方法

时间:2017-03-14 19:14:14

标签: javascript arrays

有人可以帮我理解这个剧本:

String.prototype.padLeft = function(width, char) {

    var result = this;
    char = char || " ";

    if (this.length < width)  {
        result = new Array(width - this.length + 1).join(char) + this;
    }
    return result;
};
console.log("abc".padLeft(10,"-"));

所以..我用新方法扩展对象String。 char参数是可选的(如果省略,该函数将使用空格) 我不明白这一部分:

result = new Array(width - this.length + 1).join(char) + this;

我是否创建了一个包含8个未定义元素的新数组,然后将它们与separetor分开?这是对的吗?为什么数组定义中有“+1”?提前谢谢

2 个答案:

答案 0 :(得分:1)

new Array(width - this.length + 1).join(char)

这^实际上是在说“使用n个插槽创建一个空数组,然后使用char将空插槽连接在一起以分隔每个空插槽。所以,如果char = "0"n = 3,我们得到000

width - this.length + 1 用于确定需要添加到字符串开头的字符数。

然后我们将其添加到原始字符串的开头:this

+1

你需要+ 1,因为联接的工作原理。

new Array(1).join('0') = ""      // wrong
new Array(1+1).join('0') = "0"   // correct
new Array(2).join('0') = "0"     // wrong
new Array(2+1).join('0') = "00"  // correct

答案 1 :(得分:1)

当您使用N元素加入数组时,元素之间将有N-1个分隔符。代码使用join来创建仅包含N分隔符的字符串,因此您需要为其添加一个包含N+1元素的数组来解释此问题。