JavaScript创建”稀疏“数组(sparse array)的坑

在创建”稀疏“数组(sparse array,即含有空白或空缺单元的数组)时要特别注意:

var a = [];

a[0] = 1;
// 此处没有设置a[1]单元
a[2] = [3];

a[1];     // undefined

a.length; // 3

上面的代码可以正常运行,但其中的”空白单元“(empty slot)可能会导致出人意料的结果。

a[1] 的值为 undefined,但这与将其显式赋值为 undefined(a[1] = undefined)还是有所区别。

 

数组通过数字进行索引,但有趣的是它们也是对象,所以可能包含字符串键值和属性(但这些并不计算在数组长度内):

var a =[];

a[0] = 1;
a["foobar"] = 2;

a.length;     // 1
a["foobar"];  // 2
a.foobar;     // 2

这里有个问题需要特别注意,如果字符串键值能够被强制类型转换为十进制数字的话,它们就会被当作数字索引来处理。

var a = [];

a["13"] = 42;

a.length;   // 14

在数组中加入字符串键值/属性并不是一个好主意。建议使用对象来存放键值 / 属性值,用数组来存放数字索引值。

 

posted @ 2019-08-20 09:36  Leophen  阅读(279)  评论(0编辑  收藏  举报