这个.join(this)是如何在javascript中运行的?

时间:2012-08-06 21:07:15

标签: javascript arrays

在这种情况下说:

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.

谢谢。

5 个答案:

答案 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运算符,每个数组成员在连接之前都会转换为字符串(在本例中为空字符串)。

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