Saber 酱的抱枕

Fly me to the moon

07/21
2018
游戏

Javascript 数组的字符串下标

以前没试过这玩意,今天刷题遇到了,于是去了解了这方面的知识。

var arr=[];
arr.foo=2;
arr['aa']=3;
arr[0]=1;
console.log(arr.length);	// 1
// [1, foo: 2, aa: 3]


数组用字符串做下标是可以的,但是有一些坑要注意:

字符串下标其实是给这个 Array 对象添加了属性(因为Array 也是 object)。

字符串本质是对象的属性,所以无法用数字序号取出来,也不会被普通 for、forEach、for of 循环访问到。可以用 for in 访问,因为 for in 使用了 key 来访问属性。(这是个潜在的坑)

也不能用一些数组方法对这些属性操作,如 shift()、pop()。

字符串属性都是在数组最末尾的,在数字下标之后。这可能是因为普通的下标是数字,排序在字符串之前,所以显示出来看就是字符串的下标在最后了。

另外,用属性方式添加数组的值的话,非正整数的都会成为属性,如:

var aa = [];
aa['1'] = 1;	// 数字下标 1
aa['-1'] = -1;  // 字符串下标
aa[-2] = -2;	// 字符串下标
// [empty, 1, -1: -1, -2: -2]

正整数的属性都是数字下标,非正整数的都是字符串下标了。加不加引号都一样,并不是正整数加了引号就当字符串属性了。

Javascript 数组的字符串下标