2

我设法整理了一个代码,提示用户输入姓名列表并一直这样做,直到用户输入“q”。每个输入的名称都被添加到一个数组中并稍后显示(此外,提示框会显示输入的项目总数)。

当我运行代码时,它会显示所有输入的项目加上顶部的项目“未定义”......我注意到当我收到提示并开始输入名称时,它从 0 变为 2,然后是 3、4 等。

'未定义'来自哪里,我做错了什么?

另外,请注意,当代码运行时,它返回错误“长度”为空或不是对象,但列表仍然显示。

function getNames(){
var nameItems = new Array();
var i; 
i = 0;
var userInput; 
userInput = '';
var totalItems;
totalItems = nameItems.length;
do 
{
    if ( userInput > '') { /*performs task only if something is received from     userInput, doesn't add value to array if nothing is entered.*/
    i++;
    nameItems[i] = userInput;
    }
userInput = prompt("Enter a name to add to your favorite names list (enter \'q\'     to quit. - " + nameItems.length + " items entered.","");   
} while ...
4

2 回答 2

4
if ( userInput > '') { /*performs task only if something is received from     userInput, doesn't add value to array if nothing is entered.*/
i++;
nameItems[i] = userInput;

应该

if ( userInput > '') { /*performs task only if something is received from     userInput, doesn't add value to array if nothing is entered.*/
nameItems[i] = userInput;
i++;

nameItems[0]位置永远不会改变,否则。

于 2012-12-27T20:08:44.050 回答
3

您首先增加i然后存储userInput. 因此,您实际上是在跳过第一个数组条目。反过来做,你的“未定义”条目就消失了。

注意:如果你稍微扔掉你的代码行,一切都会变得更好:

while((userInput = getInput()) != 'q')
{
    nameItems[i] = userInput;
    i++;
}

function getInput()
{
  return prompt("Enter a name to add to your favorite names list (enter \'q\'     to quit. - " + nameItems.length + " items entered.","");   
}
于 2012-12-27T20:08:42.540 回答