使用字串的 split() 方法進行字串切割是很常見的技巧,本篇所要講的是 split() 在 IE 上會遇到的問題。
 
當要被切割的字串開頭是若剛好是切割字串(以下稱 token) 的話會是如何呢?
以下為例:
     var string = "<abc><def>";
     alert (string.split(/<abc>/);
 
在 Firefox 中,alert 出來的結果為「,<def>」,陣列長度為 2,也就是會把 token 前的零長度字串也當成一個單位,但在 IE 中並不會把零長度算成一個單位,因此在 IE 中 alert 出來的結果為「<def>」,陣列長度為1。
 
大家或許會很好奇,若是 token 前、後都是零長度字串的話會如何?
以下為例:
    var string = "<abc>";
    alert (string.split(/<abc>/);
 
在 Firefox 中,alert 出來的結果為「,」,陣列長度為2;而在 IE 中,alert 出來的結果為「」,陣列長度為 0。
 
由上可知,當 token 的前、後為零長度字串時,在 Firefox 中會把零長度字串也當成一個單位,而在 IE 中卻會忽略掉零長度字串
 
最後附帶一提的是 Java 語言中也有 split() 這個方法,他的行為模式又和 Javascript 不同。
當 token 前為零長度字串而後邊不是,則會將零長度字串視為一個單位,而當 token 後為零長度字串而前面不是,則會將零長度字串忽略,若是 token 前後都會零長度字串,則也會忽略掉零長度字串。
以下為例:
    String a = "a<abc>";
    System.out.println(a.split("<abc>").length);   ----> 印出 1 (忽略掉 零長度字串)
 
    String b = "<abc>b";
    System.out.println(b.split("<abc>").length);   ----> 印出 2 (將零長度字串也算成一個單位)
 
    String c = "<abc>";
    System.out.println(c.split("<abc>").length);   ----> 印出 0 (忽略掉 零長度字串)
arrow
arrow
    全站熱搜

    大笨鳥 發表在 痞客邦 留言(0) 人氣()