【发布时间】:2011-07-13 06:56:09
【问题描述】:
我在某处读到(抱歉,我找不到链接),不建议将 For...In 循环用于数组。这里说:http://www.openjs.com/articles/for_loop.php 用于关联数组,http://www.w3schools.com/js/js_loop_for_in.asp 用于迭代对象的所有属性(它并没有说它可以用于数组)。我不知道该相信谁。我不希望这个问题成为辩论。我只想知道我是否可以在我的代码中使用它而不会产生不可预见的副作用。谢谢!
【问题讨论】:
-
W3 学校? W3Fools!尽管已经说过任何声称 Javascript 具有“关联数组”的东西也是错误的
-
@Gareth Nice 链接,但是,JavaScript 确实 有 "associative arrays"。 Perl 甚至这样称呼它们,尽管“字典”或“地图”是其他地方的常用术语。 (我更喜欢避免使用“关联数组”一词,因为我喜欢与“普通数组”ADT 保持区别;但这并不会使该术语不正确)。
-
@pst 很多人将 javascript 对象视为关联数组,但它们并不完全相同。这是迂腐的,但不同之处在于所有对象属性都是字符串。例如,
array = {}; array[42] = 'foo'; array["42"] // => 'foo' (!)。对于数字,这不是那疯狂,但对于对象(我希望能够用作“关联数组”中的键)它只是不起作用:var key1 = {name: 'Gareth'}, key2 = {}, array = {}; array[key1] = 'awesome'; array[key2] // => 'awesome' (!)在这个情况下,两个“键”具有相同的.toString(),因此设置相同的属性 -
@pst 请注意,链接的 Wikipedia 页面第一部分的要求之一是“关联数组的键也可以任意键入”