在这种情况下说:
String.prototype.times = function(count) {
return count < 1 ? '' : new Array(count + 1).join(this);
}
"hello!".times(3); //"hello!hello!hello!";
"please...".times(6); //"please...please...please...please...please...please..."
它如何添加3次新语句?在理解return语句时我也有些困惑。如果我理解这一点,请告诉我:
(if count < 1){
return ''
} else {
return new Array(count + 1).join(this) //This I don't understand.
谢谢。
答案 0 :(得分:6)
它创建一个给定长度的新数组,比如7.然后用一个字符串连接所有这些空项,最后重复该字符串6次。
通常:
[1,2,3].join("|") === "1|2|3"
然后使用长度为4的数组:
new Array(4).join("|") === "|||"
this
方法中的 String.prototype
引用该函数作为方法调用的字符串对象:
"hello".bold(); //this would refer to a string object containing "hello" inside bold()
答案 1 :(得分:3)
this
指的是受影响的字符串。因此,如果我致电"hello".times(5)
,则this
会引用"hello"
。
该功能通过创建一个包含count+1
元素的数组来工作,有效地使它们之间存在count
“间隙”。然后使用this
字符串将这些片段粘在一起,使其this
重复count
次。
当然,如果被告知要重复不到一次,结果是空的。 count < 1
检查是为了避免数组大小无效的错误。
答案 2 :(得分:1)
.join()
将加入数组的单元格,从而生成一个字符串。例如:
var arr = [ 'one', 'two', 'three' ];
var str = arr.join(', ');
// str is now "one, two, three"
因此,在times
函数中,您说的是new Array(count + 1)
。因此,如果count
为3,那么您实际上是在创建一个包含4个单元格的空数组。然后,您将使用this
(这是字符串)加入那些空单元格。
答案 3 :(得分:0)
此方法创建一个给定长度的新数组,加上1.例如:
"hello".times(3);
将创建以下数组:
[undefined × 4]
然后将这些数组元素中的每一个与.join("hello")
连接在一起。这基本上转化为:
"" /* undefined array element */ + "hello" /* join string */ + "" + "hello" ...
<小时/> 是的,您似乎理解了三元运算符。
答案 4 :(得分:0)
String.prototype.repeat = function(times) {
return new Array(times+1).join(this);
}
"go ".repeat(3) + "Giants!"; //"go go go Giants!"
重点在于separator参数,而基本数组仅包含未定义的成员值。以上示例可以通过缩写重写:
[undefined,undefined,undefined,undefined].join("go ") + "Giants!";
使用Join运算符,每个数组成员在连接之前都会转换为字符串(在本例中为空字符串)。