为什么String.prototype.split返回完整的字符串

时间:2016-03-13 22:49:50

标签: javascript string split concatenation

如果要拆分的字符串连接在一起,为什么// Single line var x = "foo,bar,boo,far".split(","); // Concatenation var y = "foo,bar," + "boo,far".split(","); // Output document.write("<pre>"); document.write(x + " :" + typeof x + "\n"); document.write(y + " :" + typeof y + "\n"); document.write("</pre>");会返回完整的字符串?

&#13;
&#13;
.split(",")
&#13;
&#13;
&#13;

在我的实际代码中,字符串非常长,并且在最后一行连接{{1}}的多行。

那么为什么会产生完整的字符串而不是预期的数组?

1 个答案:

答案 0 :(得分:2)

事实证明,问题是运营商优先级之一。它在不同的路线上并不重要。重要的是,.()的优先级高于+,因此.split()仅在最后一个块上执行。

所以在分手后发生了什么:

var y = "foo,bar," + ["boo", "far"];

因为数组被转换为字符串,并且因为默认的.toString()只是使用,加入数组,所以我们最终得到了这个:

var y = "foo,bar," + "boo,far";

导致看起来像原始字符串。

添加parens解决了这个问题。

var y = ("foo,bar," + 
          "boo,far").split(",");