1

在这种情况下说:

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.

谢谢你。

4

5 回答 5

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()
于 2012-08-06T21:09:18.387 回答
3

this,在这种情况下,指的是受到影响的字符串。所以如果我打电话"hello".times(5),那么this会参考"hello"

该函数通过创建一个包含count+1元素的数组来工作,有效地count在它们之间制造“间隙”。然后将这些碎片与this绳子粘在一起,从而this重复count多次。

当然,如果它被告知重复少于一次,结果是空的。检查是为了避免无效数组大小的count < 1错误。

于 2012-08-06T21:10:50.200 回答
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(即字符串)连接起来。

于 2012-08-06T21:12:27.097 回答
0

此方法创建一个给定长度加 1 的新数组。例如:

"hello".times(3);

将创建以下数组:

[undefined × 4]

然后将这些数组元素中的每一个与 连接在一起.join("hello")。这基本上转化为:

"" /* undefined array element */ + "hello" /* join string */ + "" + "hello" ...


是的,您似乎正在理解三元运算符。

于 2012-08-06T21:12:00.650 回答
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 运算符,每个数组成员在连接之前都会转换为字符串(在本例中为空字符串)。

来源:https ://javascriptweblog.wordpress.com/2010/11/08/javascripts-dream-team-in-praise-of-split-and-join/

于 2017-02-22T16:11:57.620 回答