javascript数组在转义一个索引时显示未定义

javascript数组在转义一个索引时显示未定义,javascript,arrays,Javascript,Arrays,当我试图分配一个带有特定索引的值时,我会遇到一个问题。假设我有javascript变量,比如 var track = new Array(); 现在我为一个特定的索引赋值,比如- track[10]= "test text"; 现在数组有一个值,它的长度是1。但主要的问题是它显示它的长度是11 alert(track.length); // 11 but I expect 1 如果我打印它的值,它就会显示-- 如果我操控这个数组,它会显示如下-- 我非常困惑,因为我只分配了一个值,但它

当我试图分配一个带有特定索引的值时,我会遇到一个问题。假设我有javascript变量,比如

var track = new Array();
现在我为一个特定的索引赋值,比如-

track[10]= "test text";
现在数组有一个值,它的长度是1。但主要的问题是它显示它的长度是11

alert(track.length);   // 11 but I expect 1
如果我打印它的值,它就会显示--

如果我操控这个数组,它会显示如下--

我非常困惑,因为我只分配了一个值,但它显示了11。它如何赋值以及数组变量显示的特征。有人能解释我和如何得到它的长度1使用下面的代码吗--


数组
对象自动填充缺少的索引。它给出长度11的原因是因为索引从
0
开始

如果要使用键值,只需使用对象即可

var track={}


但是,它不会有
.length
值。

因为您正在设置第10位的值,所以它显示的数组大小为11 您必须从第0个位置开始

var track = new Array();
 track[0]= "test text";
 alert(track); // test text
 alert(track.length); // 1
 console.log(track); // test text

试试这个

javascript会自动填充数组以推送所需的元素。通过执行以下操作,可以获得“真实”计数:

track.filter(布尔值).length


但是请注意,只有当您没有任何其他元素解析为“false”值(例如,空字符串或将其设置为false)时,这才会“起作用”,因此如果您希望这样做,请确保您从未将任何其他数组元素实际设置为false值,以便使用此约定。例如,如果要将其他数组值设置为falsy值,请使用类似
-1
的内容作为检查对象。

对于此类操作,我通常更喜欢名为underline.js的库

它抽象了数组操作。您可能希望签出该方法

Compact的工作原理如下:

_.compact([undefined, undefined, undefined, "test test"]) as  ["test test"]
然后可以检查返回数组的长度

虽然一个简单的方法是

filter(Boolean).length

但如果要使用数组,则可能需要下划线。

数组是一个数字索引集合。如果将某个值设置为
10
,则会隐式创建
0..9
索引。但过滤器(布尔值)会更改数组索引。假设如果你想过滤一个数组,它会改变它的索引,比如track[10]=“testtext”;现在,您可以在筛选后使用轨迹[0]获取值。因此,这取决于用例。一个简单的循环可以遍历数组并检查内容是否为假值。
var track = new Array();
 track[0]= "test text";
 alert(track); // test text
 alert(track.length); // 1
 console.log(track); // test text
_.compact([undefined, undefined, undefined, "test test"]) as  ["test test"]
filter(Boolean).length