JS中的数组实际上是填充了空格,还是打印时填充了零
Is an array in JS actually filled with empty spaces or when printed is it filled with zeros?
我有一个数组:
mydata =[];
我使用可能有点大的数字键将值存储在数组中
mydata[13525] = 1;
但是,如果我只存储上述一个项目,当我在控制台中打印数组时,它会在对象之前打印 13524 个逗号,但调试器告诉我它的长度为 13526,数组中只有一个元素。
我很困惑,因为我知道 JS 数组不需要填充每个位置,当然这可能会在更大的数字上消耗大量内存。你能解释一下吗?
的 .length
属性表示数组中已分配值的最高索引加 1。
当你不分配中间值(因此有一个稀疏数组)时,你没有分配的干预值是undefined
这本质上是Javascript中的"这里没有"值。 控制台通过尝试显示数组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]);
}
}
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 中,较小的值会截断数组,较大的值会创建稀疏数组。猜猜二传手mydata[13525] = 1;
会怎么做。
src: Javascript Garden
编辑:
要仅打印/使用存在的值,您可以
mydata.forEach(function(v){console.log(v);});
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- 使用javascript将动态表从一个html页面打印到另一个html页
- JavaScript打印功能使日历停止工作
- esri javascript异步打印
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- jQuery/JavaScript在线公文包表单-打印样式表
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 用我的json数据填充JQuery DataTable
- 如何打印嵌套对象的所有值
- 使用 jQuery 检查所有值是否为空或已填充
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 打印预览没有应用程序页眉和页脚的html表格
- JS中的数组实际上是填充了空格,还是打印时填充了零
- 如何使用javascript填充表并打印它
- 用星号填充DIV;待打印