2016-06-26 57 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