[英]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.