数组真的是“分隔”的吗?默认情况下在JavaScript中
Are Arrays really "sparsed" in JavaScript by default?
数组在JavaScript默认情况下真的是"sparsed"吗?
如何删除没有索引移位的单个数组元素?
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的信息。数组只是具有一些额外特殊属性的对象。索引没有键那么多
是的,索引只是对象的常规属性。
如果我做…
var array = new Array();
array[1000] = null;
…只有一个属性被添加到数组中,尽管它的length
将被更新为1001
。
如果要删除单个索引,则使用delete
。
delete a[5];
示例中的两个数组是唯一的对象。我不知道你把一个变成另一个是什么意思
相关文章:
- 在不阻止默认行为的情况下检测IE10中的缩放
- 默认情况下折叠和展开嵌套列表
- 第二组标签及其内容赢得'默认情况下t加载
- 默认情况下,在展开和折叠表时隐藏行
- 如何在默认情况下将主干视图设置为singleton
- 切换菜单仅在单击时打开,而不是默认情况下打开
- vue-js-单选按钮won't默认情况下使用v-model属性进行检查
- 如何在应用切换点击功能之前,默认情况下在页面加载时隐藏带有特定类的ul-li
- 默认情况下,在ipython笔记本中隐藏输入单元格
- 在这种情况下,调用阻止默认值
- 默认情况下,引导日期时间选取器当前日期和当前时间
- 默认情况下,jQuery 折叠项应在页面加载时折叠
- 默认情况下使用JQuery折叠表行
- 默认情况下无法预先选择所需的单选框
- jQuery默认情况下不隐藏元素
- 默认情况下在代码镜像中启动全屏
- AngularJs:默认情况下未选择单选按钮
- 默认情况下,使用贝宝自适应支付显示支付详细信息
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- 如何在没有任何鼠标事件的情况下默认显示标记内容