为什么JavaScript数组中允许使用字符串索引?

3

这是合法的:

var arr = [1, 2, 3, 4, 5];
arr['ex1'] = 6;
arr.ex2 = 7;

为什么?而且利用这种行为是否可取?

1
还要注意,arr[0]arr["0"]相同,并且您也可以对对象使用整数索引,例如 var obj = {}; obj[0] = 1; - Thilo
1
有趣的事实。数组的索引器与对象相同。arr[0] 首先将 0 强制转换为字符串或 arr["0"]。 - t3dodson
1个回答

7
因为数组只是对象,对象可以有任意属性。你可以对任何其他对象(例如函数或正则表达式)进行相同的操作。
请注意,ex2不被视为“数组索引”。只有名称位于0和2^32-2之间的属性被视为数组元素。
此行为是否可取?这取决于情况。我认为它使代码更难理解,意图不够清晰,并且可能会让不熟悉JS的人感到困惑。
当然,这种灵活性也可以成为非常强大的特性。你应该负责使用它,可能仅在没有其他选项时才使用。
然而,我没有看到添加附加属性到数组中特别有用的情况。

没错,这更准确。 length 可以是最大的 2^32-1,这就使最高索引留下了 2^32-2。(已更新 ;) ) - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接