Javascript 有人知道只有两个键是多么的一致吗?
我想知道我是否可以相信这样一个事实:Javascript 有人知道只有两个键是多么的一致吗?,javascript,Javascript,我想知道我是否可以相信这样一个事实:[1,2]只有两个键:0和2,或者是否有人碰巧知道任何JS引擎是否也会给我一个1 我测试过的每个浏览器都会显示键0、2,但目前我没有旧版本,也没有安卓手机,或者 理由: 我正在requestAnimationFrame的顶部编写一个自定义计时器库,因此基于内部数组索引返回可取消的ID。我正在试图弄清楚,只要delete ary[ix]就足以遍历数组上的所有对象键,而无需进行额外的健全性检查。如果您愿意假设您的代码将在符合要求的ECMAScript实现上运行,那
[1,2]
只有两个键:0
和2
,或者是否有人碰巧知道任何JS引擎是否也会给我一个1
我测试过的每个浏览器都会显示键0、2
,但目前我没有旧版本,也没有安卓手机,或者
理由:
我正在
requestAnimationFrame
的顶部编写一个自定义计时器库,因此基于内部数组索引返回可取消的ID。我正在试图弄清楚,只要delete ary[ix]
就足以遍历数组上的所有对象键,而无需进行额外的健全性检查。如果您愿意假设您的代码将在符合要求的ECMAScript实现上运行,那么您将被涵盖在内
数组元素可以在数组的开头、中间或结尾省略
元素列表只要元素列表中的逗号不在前面
通过赋值表达式(即,开头或后面的逗号
另一个逗号),缺少的数组元素会导致
数组,并增加后续元素的索引。省略阵列
未定义元素。如果元素在项目末尾被省略
数组,则该元素不影响数组的长度
[1,3]
将产生
[1,未定义,3]
返回的长度为3。
编辑:为了澄清,即使值存在,也不会返回键。
Object.key([1,3])
返回[“0”,“2”]
编辑2:关于检查数组键是否存在的一个很好的答案。
@MichaelBerkowski——是的,长度是
3
,但a用于in
循环或对象。键(ary)
只有0和2的键是的,值未定义,但它没有说明键是否为defined@zyklus:“未定义省略的数组元素”,尤其是在该上下文中,这意味着缺少的元素实际上不会产生已定义的索引。否则它会说它们已经定义,它们的值是未定义的,并且跳过了整个“增加索引”部分。我不太确定这种解释。例如,我可以很容易地看到JS引擎有效地执行ari[1]=undefined
,这将定义键,但保留未定义的值。@zyklus:这不会保留未定义的值。它会将其定义为未定义
。很抱歉听起来像个书呆子,这个术语没用。原因ari[1]
计算为undefined
的原因与ari[42]
的原因相同:没有键42
,就像没有键1
。这很公平。我和你读的一样,fwiw,我只是不确定我是否相信这个术语。虽然我想我可以完成实现,然后等待可能出现的错误:)和对象。键([1,3])===[0,2]
,这就是我的问题所在。在最新的FireFox和Chrome版本上进行了测试。@语法:该值不存在a[1]
是未定义的
原因与({})[“此键不存在”]
是未定义的
@Jon,OK值是一个错误的单词选择。然而,长度是3,索引1的值是未定义的,键是0和2。@语法——从技术上讲,索引1是“未定义的”,它没有未定义的值,这就是整点。如果你说ari[1]=undefined
,你的数组看起来是一样的,但是你现在也有了一个1
键