Javascript JS中的数组实际上是用空格填充的还是打印时用零填充的?
我有一个数组:Javascript JS中的数组实际上是用空格填充的还是打印时用零填充的?,javascript,arrays,Javascript,Arrays,我有一个数组: mydata =[]; 我使用一个可能有点大的数字键在数组中存储值 mydata[13525] = 1; 但是,如果我只存储一个如上所述的项,当我在控制台中打印数组时,它会在对象之前打印13524个逗号,然而调试器告诉我它的长度为13526,并且数组中只有一个元素 我很困惑,因为我知道JS数组并不要求每个位置都被填充,当然这可能会在较大的数字上消耗大量内存。你能解释一下吗?数组的.length属性表示数组中已赋值的最高索引加上一个索引 当您没有分配中间值(因此有一个稀疏数组)
mydata =[];
我使用一个可能有点大的数字键在数组中存储值
mydata[13525] = 1;
但是,如果我只存储一个如上所述的项,当我在控制台中打印数组时,它会在对象之前打印13524个逗号,然而调试器告诉我它的长度为13526,并且数组中只有一个元素
我很困惑,因为我知道JS数组并不要求每个位置都被填充,当然这可能会在较大的数字上消耗大量内存。你能解释一下吗?数组的
.length
属性表示数组中已赋值的最高索引加上一个索引
当您没有分配中间值(因此有一个稀疏数组)时,您没有分配的中间值是undefined
,这本质上是Javascript中的“nothing here”值。控制台通过尝试显示0
和数组末尾之间的每个值来选择显示数组,这对于显示大部分为空的稀疏数组来说不是一个很好的方法。这更像是控制台中设计选择的产物,而不是其他任何东西。可以设计一种不同的方式来显示数组的内容,以不同的方式处理稀疏数组
如果使用从0
开始的连续索引,则数组的效率最高。这就是它们的主要设计目标,也是许多实现的优化目标,因为如果运行时知道有一组连续的值,它可以做一些优化的事情
如果您知道大部分情况下不会使用从
0
开始的数字索引序列,并且因此.length
属性对您没有多大用处,那么具有任意属性的普通对象可能是更好的选择
var mydata = {};
mydata[13525] = 1;
console.log(mydata[13525]); // 1
console.log(mydata.length); // undefined - no .length property on an object
console.log(myData); // {1: 13525}
如果您只想打印数组中的任何非空值,而不是打印整个数组,我将使用只打印非空值的for循环。应该是这样的
for (i = 0; i < mydata.length; i++) {
if(mydata[i]!= null){
console.log(mydata[i]);
}
}
(i=0;i
if(mydata[i]!=null){
console.log(mydata[i]);
}
}
javascript数组与其他数组略有不同
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push(4);
foo; // [1, 2, 3, undefined, undefined, undefined, 4]
虽然length属性的getter只返回数组中包含的元素数,但在setter中,较小的值截断数组,较大的值创建稀疏数组。猜一下settermydata[13525]=1代码>就可以了
src:
编辑:
要仅打印/使用当前的值,可以执行以下操作
mydata.forEach(function(v){console.log(v);});
如何打印阵列?console.log(mydata);