2016-06-26 59 views
1

我今天在JS中使用正則表達式,並遇到了一個我從未見過的數據結構:一個數組,其中一些條目有鍵。返回這種數據結構的方法是正則表達式match函數。這裏有一個例子:帶有鍵的Javascript數組

var re = /SESSID=\w+=;/; 
    var test = 'SESSID=aaaa=;fjsdfjd'; 
    var arr = test.match(re); 
    console.log(arr); // ["SESSID=aaaa=;", index: 0, input: "SESSID=aaaa=;fjsdfjd"] 
    console.log(arr[0]); // SESSID=aaaa=; 
    console.log(arr['index']); // 0 
    console.log(arr['input']); // SESSID=aaaa=;fjsdfjd 

這是怎麼回事?

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match#Description – Redu

+2

請注意,向數組添加非索引屬性可能會使實現切換底層數據結構散列表(或任何他們用於普通對象)。所以最好不要這樣做。 – Oriol

回答

3

數組只是對象。他們可以有任何種類的屬性。

名稱爲數字字符串的屬性是特殊的,因爲它們綁定在「length」屬性的語義中,但除此之外它們也只是普通屬性。

我應該注意,雖然以上所有內容都是正確的,但是在將非數字屬性添加到數組時還是需要知道的。非數字屬性不會影響「長度」值,因此您不能使用.length來查看有多少。更重要的是,當使用JSON.stringify()序列化數組時,輸出中不包含非數字屬性。

+0

真棒 - 謝謝!我怎樣才能自己創建這樣一個對象?如果我嘗試'var test = ['zero',one:'one'];',我得到一個'Unexpected token:'錯誤。 – kcstricks

+0

@kcstricks創建數組,然後像添加一個普通對象一樣爲它添加屬性。然而,你不能用數組初始值設定語法來完成它。 – Pointy