[英]How are items being added to this javascript array here?
查看初学者的javascript书籍,并尝试了解一个小的浏览器程序,该程序可使用用户输入来构建列表。 输入框将显示并输入字符串作为输入,直到他仅添加“”作为输入为止。 然后列表显示在浏览器中。
这是代码:
var userInput = " ";
var namesArray = new Array();
while ( (userInput = prompt("Enter name", " ")) != " ") {
namesArray[namesArray.length] = userInput;
}
namesArray.sort();
var namesList = namesArray.join("<br />");
var listHolder = document.createElement('div');
var list = listHolder.innerHTML = namesList;
document.body.appendChild(listHolder);
我只是不了解作者将项目添加到数组的方式。 有人会介意解释namesArray [namesArray.length] = userInput如何构建数组吗?
另外这里有一个小提琴来尝试
提前谢谢!
基本上,.length是数组的大小,因此.length是数组中的下一个索引,尚无任何内容。 他只是将字符串添加到数组.length的末尾,这在数组的末尾创建了一个新位置。 .length - 1
是数组的最后一个元素,因此.length
将在数组的末尾创建一个新位置。 下一次通过循环时,长度将比上一次大一倍,因为您已向数组中添加了一个元素。
所以发生了什么,我们得到了一个while循环,该循环将继续询问名字,直到我们得到一个空的响应:
while ( (userInput = prompt("Enter name", " ")) != " ")
然后,它使用初始namesArray的长度来索引新值。
namesArray[namesArray.length] = userInput;
因此我们知道该数组最初是空的。 因此,在第一次运行时,长度将为零! 我们还知道索引为0是数组中的第一项。 因此,它将其作为第一项添加到数组。 之后,数组的长度现在为1(因为我们刚刚添加了一个项目)。 因此,在下一次迭代中,我们将新项目添加到索引为1的数组,将其长度增加为2。这将一直持续下去,直到我们打破while循环。
因此,如果将其分解,我们将更清楚地看到它:
//First iteration
newArray.length = 0;
newArray[newArray.length] = newArray[0]
//Second iteration
newArray.length = 1;
newArray[newArray.length] = newArray[0]
etc.
(userInput = prompt("Enter name", " ")) != " ")
while循环的条件(userInput = prompt("Enter name", " ")) != " ")
都将保持为真。
每次输入名称时,都会为长度索引分配名称。 每次分配名称时,长度都会增加。 结果,对于每个输入的名称,数组都会增加。
通常,您可以通过.push()
方法轻松地将元素添加到数组中。 例如:
var ary = []; // empty array
ary.push('foo'); // the ary array now has one element, 'foo'
现在,数组索引从零开始,这意味着您将第一个元素称为[0],将第二个元素称为[1], .length
。但是, .length
属性将返回数组中元素的实际数量。 因此,如果我们向数组中添加10个元素,则要求长度将使我们得到10
。
因此,编写该代码的人正在使用.length
属性允许您定位尚不存在的数组元素-最后一个元素之后的元素。
例如,假设我们有一个包含10个元素的数组。 length属性将为10,但是最后一项的索引将为9,因为索引是从零开始的。 当该代码的作者这样做时:
namesArray[namesArray.length] = userInput;
他们还说的是namesArray[10] = userInput;
,然后将userInput
分配给userInput
的第11个位置(请记住,零索引)。
由于这样做可能会造成一些混乱,因此大多数程序员将只使用.push()
方法,该方法会自动将您传递的值附加到数组的末尾,而无需指定索引。
由于数组的索引从零开始,因此数组中的最后一个元素始终具有索引
namesArray.length-1
因此,下一个可用的未使用索引始终等于
namesArray.length
您可以在此索引处安全地设置值,并知道它们将被添加到数组的末尾。
因此,您有以下数组:
var namesArray = new Array();
并且您可能知道可以像这样插入数组值:
namesAray[0] = 'first value';
namesAray[1] = 'second value';
namesAray[2] = 'third value';
现在,代码是这样的:
namesArray[namesArray.length] = userInput;
因此,这里的namesArray.length
带给您数组的大小。 好的,如上所示,我已经在namesArray namesArray[0],namesArray[1], namesArray[2]
添加了三个值。 因此,数组的当前大小为3, namesArray[namesArray.length]
等于namesArray[3]
,现在在此插入输入值。
因此,像这样,代码while ( (userInput = prompt("Enter name", " ")) != " ") {
新的数组值插入到由while ( (userInput = prompt("Enter name", " ")) != " ") {
希望你能理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.