function spacing(num){
var a=[];
var aToStr="";
for(i=0;i<num;i++) {
a.push(" ")
}
for(i=0;i<a.length;i++) {
aToStr=a[i]+aToStr;
}
// alert(a.length);result is 5 here
// alert(aToStr.split("&").length);//here result is 6 and when printed to screen theres an empty index
return aToStr;
}
正如我在代码中所解释的那样。数组中发生了一些事情,不知何故还会出现另外一个索引。 当我将它打印到屏幕上时,该索引中只有一个空格。
答案 0 :(得分:1)
首先,您的问题应简化为:
为什么
"  ".split("&").length
是3而不是2?
或强>
为什么
"&".split("&").length
是2而不是0?
对于最后一个版本,答案是JavaScript认为你有2个空字符串 s(""
):其中一个在分隔符之前,其中一个在它之后。为什么?这就是他们决定实现这个功能的方法=&gt; 只是一个决定。在Java中,类似的尝试将返回0
。
如果您认为这很奇怪,请注意"a".split("b").length
返回1
!
因此,JavaScript会考虑answer = 1 + numberOfAppearancesForThatSeparator
。
答案 1 :(得分:0)
来自MDN:
找到后,将从字符串中删除分隔符,并以数组形式返回子字符串。
开始使用split
进行搜索,先找到&amp;
     
// & found and removed, resulting in ' '
// returnArrForSplit = ['']
查找第二个&amp;
nbsp    
// & found and removed, everything before pushed to returnArrForSplit, 'nbsp'
// returnArrForSplit = ['', nbsp]
第三&amp;
nbsp   
// & found and removed, resulting in 'nbsp'
// returnArrForSplit = ['', nbsp, nbsp]
第四&amp;
nbsp  
// & found and removed, resulting in 'nbsp'
// returnArrForSplit = ['', nbsp, nbsp, nbsp]
最终&amp;
nbsp 
// & found and removed, resulting in 'nbsp'
// returnArrForSplit = ['', nbsp, nbsp, nbsp, nbsp]
但是还剩下一个nbsp
!
nbsp
// added as last substring
// returnArrForSplit = ['', nbsp, nbsp, nbsp, nbsp, nbsp]
returnArrForSplit.shift()
// removes unwanted empty string.
function spacing(num){
var a=[];
var aToStr="";
for(i=0;i<num;i++) {
a.push(" ")
}
for(i=0;i<a.length;i++) {
aToStr=a[i]+aToStr;
}
return aToStr;
}
var spaces = spacing(5);
// "     "
spaces = spaces.split('&');
// ["", "nbsp", "nbsp", "nbsp", "nbsp", "nbsp"]
spaces.shift() // returns ''
// spaces is ["nbsp", "nbsp", "nbsp", "nbsp", "nbsp"]