2011-03-02 28 views
24

首先的分割()函數的混亂我設置一個變量,並將其設置爲空:關於JavaScript

var strs = str.split('&'); 

在:

var str = ""; 

然後,我通過「&」拆分它結束,我展示了strs的長度:

alert(strs.length); 

它提醒「1」。

但我沒有給'str'變量賦值。爲什麼它仍然有一個長度,不應該是零?

回答

40

從MDC DOC中心:

注:當字符串是空的,split返回包含一個空字符串,而不是一個空數組的數組。

閱讀完整的文檔:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

換句話說,這是由設計,而不是一個錯誤:)

+0

+1文檔的鏈接,我得到了更多的偷懶所以沒有搜索它首先:) – BoltClock 2011-03-02 08:11:01

+3

當將這種「設計選擇」比返回一個更好空陣列? – 2014-08-13 11:56:12

+3

這是爲了一致性。 ''&'。split('&')'返回2個空字符串; '&&'。split('&')'返回3;等等。 – 2014-11-10 02:03:50

8

因爲你得到一個包含空字符串數組:

[ "" ] 

空字符串是一個元素。所以length是1

1

的JavaScript split創建一個數組。也就是說,你的變量,strs = [0]=>""和其長度爲1。

5

拆分window.location.pathname

注意,在window.location.pathname分裂它將大多返回+1的長度也。

假設我們在這種情況下的路徑名是:/index.html

var str = window.location.pathname.split('/'); 

它將被設計分割成["" , "index.html"],正如此前多次提到的那樣。

人能在這種情況下,做的是,剝離開頭和結尾/像這樣:

var str = window.location.pathname.replace(/^\/|\/$/g, '').split('/'); 

,並與「正確」的主編長度結束。

0

我生病了總是檢查的[0] == '' 這樣:

String.prototype.splitPlus = function(sep) { 
    var a = this.split(sep) 
    if (a[0] == '') return []; 
    return a; 
}; 

修正版本,當元素1可能爲空:

String.prototype.splitPlus = function(sep) { 
    var a = this.split(sep) 
    if (a[0] == '' && a.length == 1) return []; 
    return a; 
    }; 
+1

這會失敗,因爲「,a,b,c」.splitPlus(「,」),雖然 - 返回[]時它應該返回[「」,「a」,「b」,「c」]。你也必須檢查數組的長度。 – CherryDT 2015-05-20 11:45:03

+0

將&& a.length> 0添加到您的if條件中。 – aggaton 2015-08-06 20:04:39

+0

@aggaton我添加了正確的版本:'if(a [0] ==''&& a.length == 1)return [];' – 2015-08-07 20:07:35

0

試試這個

javascript通過分割函數給出了兩個數組,然後

var Val = "[email protected]"; 
var mail = Val.split('@'); 

if(mail[0] && mail[1]) { alert('valid'); } 
else { alert('Enter valid email id'); valid=0; } 

如果兩個數組包含長度大於0,則情況將真正