<p style="line-height: 18px; font-size: 18px; font-family: times;">
Click "<i>Load samples</i>" to view and edit more JS samples.<br>
<br>
Labyrinth generated with JavaScript:<br><br>
<script>
var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
sample.push({});
console.log(sample.length);
var map = {};
map[5] = 3;
console.log(map.length);
</script>
</p>
大家好:
我是JavaScript的新手,对C(C ++)更为熟悉。
我测试了上面的代码&amp;无法弄清楚地图的含义。
如果我宣布:
,区别是什么?A. map = [];
B. map = {};
方式A似乎是一个空数组,但B是一个空对象。
为什么我可以将它设置为数组的方式? (由[]运算符,如map [5] = 3)。
为什么地图的长度 未定义 ?
我可以将地图视为JavaScript的哈希表吗?
感谢。
答案 0 :(得分:3)
数组是由连续索引数据标识的数据集。虽然,对象完全不同。它们具有多个键值对。因此,数组完全由它们的索引组成。对象完全靠他们的钥匙。
var map = [];
map [5] = 5;
console.log(map.length);
上面给出了6
作为长度,因为没有定义0
到5
的连续值。
另一方面,对象有键。因此,要查找对象的长度,我们需要使用Object.keys
函数,它将获取数组中的所有键。
var map = {};
map[5] = 5;
console.log(Object.keys(map));
console.log(Object.keys(map).length);
此处的密钥类型5
将存储为"5"
(字符串格式)。对于数组而言,对象不具有undefined
值。他们只存储钥匙。 :)
答案 1 :(得分:1)
在数组map[5]
中,5
此处为index
,代表数组中的6th
元素,其值为5
,这意味着您之前已经创建了5个元素,只有值为undefined
,
在对象map[5]
中,此处的5
是关键,并不意味着已创建其他元素,因此长度为1