默认情况下,JavaScript 中的数组真的“稀疏”吗?
如何在不移动索引的情况下删除单个数组元素?
有什么区别:
var a = new Array(10);
var b = new Array(2);
这些数组在内存中占用的空间不同吗?我可以将 Array(2)
转换为 Array(10)
并返回吗?
更新1
以下代码
<body>
<script type="text/javascript">
var a = new Array(10);
var b = new Array(2);
document.write('a[5] is ' + a[5] + '<br/>');
document.write('a[15] is ' + a[15] + '<br/>');
document.write('a.length is ' + a.length + '<br/>');
document.write('b[5] is ' + b[5] + '<br/>');
document.write('b[15] is ' + b[15] + '<br/>');
document.write('b.length is ' + b.length + '<br/>');
b[9]=12;
delete b[9];
document.write('After resize...<br/>');
document.write('b[5] is ' + b[5] + '<br/>');
document.write('b[15] is ' + b[15] + '<br/>');
document.write('b.length is ' + b.length + '<br/>');
</script>
</body>
将返回
a[5] is undefined
a[15] is undefined
a.length is 10
b[5] is undefined
b[15] is undefined
b.length is 2
After resize...
b[5] is undefined
b[15] is undefined
b.length is 10
因此,我使 b
具有与 a
相同的属性。我可以在不为 b[9]
分配假值的情况下执行此操作吗?我可以反转,即让 a.length
为 2 吗?
最佳答案
是的,默认情况下数组是稀疏的。它们的属性甚至没有定义。您可以使用以下代码进行测试:
var arr = new Array(10); for(var x in arr) { alert(x); // Never alerts a number }
要删除单个元素,请使用
delete
:delete arr[5]; // Deletes element 6.
内存可能无关紧要,不同的引擎会以不同的方式处理它。我认为这个问题无法准确回答。至于改变维度,JavaScript 数组没有固定的维度。这是完全合法的:
var arr = new Array(2); arr[5] = "Hello!";
您可以在 http://developer.mozilla.com/ 上阅读有关 JavaScript 的更多信息。 。数组只是具有一些额外特殊属性的对象。它实际上没有索引,而是有键。
关于javascript - 默认情况下,JavaScript 中的数组真的是 "sparsed"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626643/