2015-06-02 41 views
2

我想知道是否有更简单/更简单的方法来编写重复代码。如果输入到提示框中的名称没有任何内容,那么它会发送一条错误消息并将其重新输入。有没有更简单或更简单的方法来编写此重复代码?

只是让我不要有很多解释,继承人的代码:

function error() { 
    alert('You must enter a name.'); 
} 

var Name = prompt('What is your name?', 'Name'); 

function repeat() { 
    var Name = prompt('What is your name?', 'Name'); 
    if(Name === '') { 
     error(); 
     repeat(); 
    } 
} 

if(Name === '') { 
    error(); 
    repeat(); 
} 
+1

为什么不只是一个while循环? – jfriend00

+0

顺便说一句,变量名应该以小写字母开头(上部表示一个类)。因此,'var name =' – MaxZoom

回答

9

像这样:

var Name; 
 

 
while(!(Name=prompt('What is your name?', 'Name'))) { 
 
    alert('You must enter a name.'); 
 
}

它是如何工作

while循环重复,直到满足条件。在这种情况下,条件是:

!(Name=prompt('What is your name?', 'Name')) 

表达的这部分分配promptName(如你已经知道):

Name=prompt('What is your name?', 'Name') 

在JavaScript中,一个赋值给一个变量还有返回的值。 (这就是为什么我们可以链分配,例如a = b = c = 16。)

所以,如果你输入“乔纳森”作为名字,这个表达式变成“乔纳森”:

(Name=prompt('What is your name?', 'Name')) 

如果你输入什么作为名称,表达式变成空字符串。

逻辑NOT运算符(!)在表达式返回与表达式的“真实性”相反的布尔值之前。一个字符串值是truthy,但空字符串是falsy

通过将NOT运算表达式:

!(Name=prompt('What is your name?', 'Name')) 

…循环将继续,直到Name变量有一个值。

最后的想法:按照惯例,变量应该以小写字母开头。我在这里没有这样做,因为namewindow的一个属性,并且更改窗口的名称可能会导致问题。理想情况下,您的提示将在一个函数内,这样您就不会有任何全局变量。如果是这种情况,您可以像其他人所建议的那样使用变量name

+1

为了完整起见,我会添加'var name'部分... – Amit

+1

哦,这很有帮助,谢谢! –

+0

@MaxZoom:我不认为你和我正在看同样的答案。基本上:***没有***代码是不言自明的*为初学者*。 (当前的答案非常好。) –

0
function repeat() { 
    var Name = prompt('What is your name?', 'Name'); 
    if(!Name) { 
     repeat(); 
    } else { 
     return; 
    } 
} 

只是在函数内部调用自己,只有满足条件时才退出。

+2

'else'部分是不必要的。 '函数repeat()'是一个语法错误;只需使用'repeat()' – royhowie

+1

而'function repeat();'部分是一个语法错误。 –

+1

不是一个好主意,在这个例子中递归调用重复函数。 Beter使用while循环。 – phuzi

2

虽然我喜欢在一段时间内完成所有工作,但我自己也是这么做的。同样值得了解它与do..while循环之间的区别,这可能有助于初学者顺序阅读并理解每一步。

var name; 
do { 
    name = prompt('What is your name?', 'Name'); 
    if (name == '') { 
    alert('You must enter a name.'); 
    } 
} while (name == ''); // jump back to first line of *do* body if true. 
+0

我同意。即使更详细,这种方法对于初学者来说更容易阅读。 – royhowie

+0

谢谢,这帮助我很多!但是'=='和'==='之间的区别是什么? –

+0

看看这里:http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons – dmarlow

相关问题