默认情况下,数组中的数组是否真的被“解析”了?
如何删除没有索引移位的单个数组元素?
有什么区别:
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吗?
答案 0 :(得分:4)
是的,默认情况下数组是稀疏的。他们的属性甚至没有定义。您可以使用以下代码进行测试:
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。数组只是具有一些额外特殊属性的对象。它并没有像钥匙那样真正拥有索引。
答案 1 :(得分:1)
是的,索引只是对象的常规属性。
如果我......
var array = new Array();
array[1000] = null;
...只有一个属性添加到数组中,但其length
将更新为1001
。
要删除没有重新索引的单个,请使用delete
。
delete a[5];
示例中的两个数组是唯一对象。不确定你把一个变成另一个是什么意思。