在 IE 中的 JavaScript split() 函數

Harry Fuecks 在 Site Point 說了一個令他困惑的問題:IE 中的 JavaScript split() 函數並不符合規範

Fuecks 引述 ECMA-262(即 JavaScript 1.5,參考「用 ECMAScript 寫網頁」)中有關 split() 函式的定義:

若果正規表達式裡面的分隔字元有括號包圍,每當分隔字元被搜尋到,括號中的內容便會被切割出來放到輸出的陣列裡。……

Fuecks 認為這種語法在其他編程語言很常見,例如在 Perl 中:

 Perl |  copy code |? 
1
use Data::Dumper;
2
print Dumper(split(/(:)/, 'a:b:c'));

輸出是:

 Perl |  copy code |? 
1
$VAR1 = 'a';
2
$VAR2 = ':';
3
$VAR3 = 'b';
4
$VAR4 = ':';
5
$VAR5 = 'c';

這是正確的輸出。在 PHP 中:

 PHP |  copy code |? 
1
print_r(preg_split('/(:)/', 'a:b:c', -1, PREG_SPLIT_DELIM_CAPTURE));

輸出是:

 PHP |  copy code |? 
1
Array (
2
    [0] => a
3
    [1] => :
4
    [2] => b
5
    [3] => :
6
    [4] => c
7
)

顯然這個也跟規範吻合。在 Python 中:

 Python |  copy code |? 
1
import re
2
print re.compile('(:)').split('a:b:c') 

輸出是:

 Python |  copy code |? 
1
['a', ':', 'b', ':', 'c']

這也是正確的。在 Firefox 和 Opera 9 中使用 JavaScript:

 Javascript |  copy code |? 
1
alert( "a:b:c".split(/(:)/) ); 

輸出是:

 Javascript |  copy code |? 
1
["a",":","b",":","c"]

毫不意外地兩個瀏覽器都輸出了正確的結果。但是到了 IE 手上,這個函數的輸出變成了:

a,b,c

IE 喜歡獨樹一幟的又一例證。

發表回覆

  

  

  

您可使用下列 these HTML標籤

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>