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”?提前谢谢
答案 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
元素的数组来解释此问题。