有人可以解释这个JS代码

时间:2017-09-27 20:23:56

标签: javascript arrays web

myArray = [];
myArray.length;

myArray[1000000] = true;

myArray.length;

为什么这会返回100001? 我在道格拉斯克罗克福德书中读到这个,我不明白这是什么 意味着

4 个答案:

答案 0 :(得分:2)

1000001,你可能意味着。只要访问超出当前范围的元素,就会扩展数组。这就是为什么你触摸它的元素没有。 10⁶,它变成10⁶+ 1个元素。

答案 1 :(得分:2)

也许您使用较小的索引进行检查,例如10,并查看数组的值。

结果是一个稀疏数组,索引缺失,索引10上有一个值。

长度一如既往地是最后一个索引加一。



var myArray = [];

console.log(myArray.length);

myArray[10] = true;
console.log(myArray.length);
console.log(myArray);




答案 2 :(得分:1)

数组从索引0开始,所以如果我们有一个数组:

var arr = [1,2,3,4,5];

arr[0]1arr[1]2,依此类推,数组的长度为5,因为它包含5& #34;元件&#34 ;.所以,数组从索引0开始(如果你想得到数组的第一个元素,你必须运行arr[0],而不是arr[1],因为arr[1]将是第二个元素)但.length计算元素并以" 1"开头。对于第一个元素," 2"对于第二个元素,等等。

现在运行时:

var arr = [1,2,3,4,5];
arr[200] = "whatever";
console.log(arr);

您将获得此输出:

(201) [1, 2, 3, 4, 5, undefined × 195, "whatever"]

因此,当我们在索引200(实际上是数组中的第201个元素,因为数组从0开始,而不是1)中随机添加元素到数组时,数组的长度刚刚增长从5201(在输出中可以看到相同的东西),正如您在输出中看到的那样,数组现在包含原始的5个元素(1,{{ 1}},234),195个幽灵元素,当你查询它们时它们的值为5(请不要理解鬼元素的含义只是现在虽然),并且在它的末尾有一个undefined元素(如果您手动插入195 "whatever"个元素,控制台中的输出会略有不同,但不要为此烦恼现在)。

因此,在您的情况下,定义了一个数组(undefined),默认情况下,它不包含任何内容,因此它的长度为myArray。然后你继续说"我想在这个数组的第1000000个索引处添加一个元素" (0行),不要让添加元素的myArray[1000000] = true值让您感到困惑!无论true部分后面的内容是什么,输出都是相同的,因此myArray[1000000] =会给你相同的输出:一个长度为myArray[1000000] = "whatever"的数组。以下是与1000001一起使用时数组的输出(请记住,即使插入console.log(..)代替"whatever",输出也会相同):

true

另外,请记住,当您说(1000001) [undefined × 1000000, true] 稀疏时,您获得的数组(如果您对sparse arrays感兴趣)

其他评论也正确地回答了您的问题,但我之所以这样做是因为:1。我感到很遗憾var arr = []; arr[1000] = "foo" true部分让您感到困惑。他们用一种不太清楚的方式解释了数组 - 从0开始的事情。

答案 3 :(得分:1)

它返回100001因为, myArray = []; 会创建一个空数组

这就是为什么 myArray.length; = 0

当您执行 myArray [1000000] = true;

那个时候实际发生的是它将所有从第0个索引到第999999个索引的值都置为未定义,然后将1000000值设置为true。所以实际上数组中有1000001个值。 这就是为什么长度是1000001

数组的每个函数都指定数组作为序列中的事物集合起作用,这意味着即使您提供任何随机索引,您也无法将值放在随机位置,默认值(未定义)将作为值提供其他地方。