关于空对象的javascript长度

关于空对象的javascript长度,javascript,Javascript,方式A似乎是一个空数组,但B是一个空对象 为什么我可以将其设置为数组的方式?by[]运算符,例如map[5]=3 为什么地图的长度没有定义 我可以将map视为JavaScript的哈希表吗 谢谢。数组是一组数据,由连续的索引数据标识。然而,对象是完全不同的。它们有多个键值对。因此,数组完全由其索引决定。对象完全由其键控制 var-map=[]; map[5]=5; console.logmap.length 在数组中,map[5],这里的5是索引,表示数组中的第6个元素,它的值为5,这意味着之

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

为什么我可以将其设置为数组的方式?by[]运算符,例如map[5]=3

为什么地图的长度没有定义

我可以将map视为JavaScript的哈希表吗


谢谢。

数组是一组数据,由连续的索引数据标识。然而,对象是完全不同的。它们有多个键值对。因此,数组完全由其索引决定。对象完全由其键控制

var-map=[]; map[5]=5; console.logmap.length 在数组中,map[5],这里的5是索引,表示数组中的第6个元素,它的值为5,这意味着之前已经创建了5个元素,只是值未定义


在object map[5]中,这里的5是关键,并不意味着创建了其他元素,因此长度为1

这是一个核心问题。数组是数字索引的,而对象不是。使用console.logmap,您将看到5实际上是一个“字符串”键,而不是像您在arrayPossible duplicate中看到的那样,在计算中,哈希表哈希映射是用于实现关联数组的数据结构,一种可以将键映射到值的结构。哈希表使用哈希函数将索引计算到一个桶或槽数组中,从中可以找到所需的值。-来自维基百科-javascript对象是否使用哈希函数存储密钥?@activedecay你说得对。。。JavaScript对象通常是散列映射。我想知道它们是否在计算散列,它们的键是否会发生冲突。键值将被替换。我想回答OP的第三个问题,您可以编辑这个答案,以包括JavaScript引擎中对象的实现依赖于实现这一事实——但是假设OP询问它是否是哈希表,这可能是可以的。是的,我猜这是一个哈希表,因为它将一个键与一个值关联起来。现在停止我的肛门咆哮
<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>
A. map = [];
B. map = {};