2016-12-01 39 views
-5

我有两个场景中都分离的情况下()的行为不同Uexpected行为连续

1.当我们说

var x ="dadasd\n\n\nsdfsfsdf" 
var y=x.split('\n') 

then value of is y 
["dadasd", "", "", "sdfsfsdf"] 

,但我期待Y中

["dadasd", "", "","","sdfsfsdf"] 

2.now当我们说

var z ="fsdfsfs\n\n\n" 
undefined 
var a =z.split("\n") 
undefined 
a 
["fsdfsfs", "", "", ""] 

这一次我得到的预期值,为什么这两种方案具有不同的行为

为什么分裂()的行为不同的第一种情况,以及我们在Java脚本的任何功能,可以给我预期的结果在我的第一个场景

+1

FWIW我不认为这是一个很好的重复。这可能是任何分隔符字符的相同问题,只是它恰好是换行符。 –

+0

@JamesThorpe好的,重新开放。 –

+0

@JamesThorpe - 我同意这是一个糟糕的重复。另一方面,很难想象以前没有人问及过这个问题。 –

回答

5

行为是一致的和正确的。 \n分离令牌。在第一种情况下,在三个\n之间有两个两个空标记(""),并且两个标记之间有一个非空标记。在第二种情况下,在\n(序列前的非空标记)和第三个\n后的另一个空标记之间有两个空标记。因此输出。

另一种考虑它的方法是:\n分隔符不对应于输出字符串。相反,对于每个\n,左侧都有一个标记(可能为空,如果左侧是另一个\n或字符串的开始),右侧有一个标记(同样可能为空)。 (当然,一个分隔符左侧的符号和另一个分隔符右侧的符号只会在输出中出现一次。)将每个分隔符的出现以及整个字符串的开始和结尾视为fence分支。然后split()的输出是围栏柱子之间的数组。所以如果你有三个分隔符,你有五个围栏帖子,因此有四个输出令牌。

阅读关于Fencepost errors的信息可能很有帮助。