【发布时间】:2012-11-17 02:25:20
【问题描述】:
在javascript中我定义了一个这样的数组
var arr = [1,2,3];
我也可以
arr[-1] = 4;
如果我这样做了
arr = undefined;
我也失去了对 arr[-1] 处的值的引用。
所以对我来说逻辑上似乎 arr[-1] 也是 arr 的一部分。
但是当我执行以下操作时(没有将 arr 设置为未定义)
arr.length;
它返回 3 而不是 4;
所以我的观点是如果数组可以与负索引一起使用,这些负索引也应该是它们长度的一部分**。 我不知道可能是我错了,或者我可能遗漏了一些关于数组的概念。
【问题讨论】:
-
为什么要使用负索引?这很令人困惑。除非我遗漏了什么,否则我看不出重点。
-
你也可以写
arr[1.5] = 1,这也不影响长度。语言规范非常清楚影响长度的因素。你可能不喜欢它,但你必须忍受它。要么设计自己的竞争语言并说服人们改用它。 -
@DigvijayYadav:与 JavaScript 中的许多其他东西一样,可以被视为缺陷或功能。这是因为数组的行为有点像对象,您也可以使用字符串
var a = []; a['foo'] = 'baz',但这并不意味着您应该这样做;这显然违反了所有惯例。 -
伙计们,这里的重点是数组是对象。没有区别。这就是这种行为的原因,即使你不喜欢它也完全是故意的。等到您知道所有数字都表示为浮点数,甚至整数。 JavaScript 是一种奇怪的语言...
-
您可以在规范中找到定义数组元素设置的算法的详细信息:es5.github.com/#x15.4.5.1.(especially step 4) 和“数组索引”在这里定义:es5.github.com/#x15.4。
标签: javascript arrays