关于空对象的javascript长度

时间:2016-12-19 20:56:13

标签: javascript

<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;无法弄清楚地图的含义。

  1. 如果我宣布:

    ,区别是什么?
    A. map = [];
    B. map = {};
    

    方式A似乎是一个空数组,但B是一个空对象。

  2. 为什么我可以将它设置为数组的方式? (由[]运算符,如map [5] = 3)。

  3. 为什么地图的长度 未定义

  4. 我可以将地图视为JavaScript的哈希表吗?

  5. 感谢。

2 个答案:

答案 0 :(得分:3)

数组是由连续索引数据标识的数据集。虽然,对象完全不同。它们具有多个键值对。因此,数组完全由它们的索引组成。对象完全靠他们的钥匙。

var map = [];
map [5] = 5;
console.log(map.length);

上面给出了6作为长度,因为没有定义05的连续值。

另一方面,对象有键。因此,要查找对象的长度,我们需要使用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