【发布时间】:2010-11-19 00:36:27
【问题描述】:
我突然想到的一个问题:
如果我像这样在 PHP 中定义一个数组:
$arr = Array();
$arr[7392171] = "some value";
这是如何在内部存储的?它将键 7392171 映射到“某个值”,还是像 JavaScript 一样工作并在其前面放置 7392170 个空值?
我猜是前者,因为索引数组和关联数组是相同的(至少根据我的理解)并且与 JavaScript 中的对象相当。
所以是的,只是想知道:)
【问题讨论】:
-
你认为 JavaScript 为什么会在它前面放 7392170 个空值???
-
因为:
var arr = []; arr[7392171] = "some value";如果您现在查看该数组,您会得到,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, (massive number of commas) ,,,,,,,,,,,"some value"- 这就是原因。 -
哦,因为在分配之后,
arr.length返回 7392171。 -
“没有错”按钮在哪里?
-
@Kolink JavaScript 没有创建元素 - 例如,如果你这样做 for(i in arr) { console.log(i) } 它只会报告单个键。问题是 ECMASCript 数组期望是一个有序列表,但您将它视为一个对象,因此 .length 报告了不正确的计数。仅供参考,无论您使用什么来查看逗号,都使用了同样的错误假设。