<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++) 更加熟悉。
我测试了上面的代码,无法弄清楚 map 的含义。
如果我声明有什么区别:
A. map = []; B. map = {};
方式 A 似乎是一个空数组,但 B 是一个空对象。
为什么可以设置为数组的方式? (通过[]运算符,例如map[5] = 3)。
为什么 map 的长度未定义?
我可以将map视为JavaScript的哈希表吗?
谢谢。
最佳答案
数组是一组数据,由连续的索引数据标识。然而,对象是完全不同的。他们有多个键值对。因此,数组仅由它们的索引决定。对象仅由它们的键决定。
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);
此处 key 的类型,5
将存储为“5”
(字符串格式)。与数组不同的是,对象没有未定义
值。他们只存储 key 。 :)
关于关于空对象的 JavaScript 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230869/