是否有更简单或更短的方法来编写此重复代码?

Joh*_*tag 2 javascript

我想知道是否有更短/更简单的方法来编写重复代码.如果在提示框中输入的名称没有任何内容,那么它将发送错误消息并重新输出.

就这样,我不必解释很多,继承人的代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ock 9

像这样:

var Name;

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

这个怎么运作

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

!(Name=prompt('What is your name?', 'Name'))
Run Code Online (Sandbox Code Playgroud)

表达式的这一部分将prompt值赋给Name(如您所知):

Name=prompt('What is your name?', 'Name')
Run Code Online (Sandbox Code Playgroud)

在JavaScript中,对变量的赋值也返回值.(这就是为什么我们可以链接分配,如a = b = c = 16.)

因此,如果您输入"Johnathan"作为名称,则此表达式将变为"Johnathan":

(Name=prompt('What is your name?', 'Name'))
Run Code Online (Sandbox Code Playgroud)

如果您不输入任何内容作为名称,则表达式将变为空字符串.

!表达式之前的逻辑NOT运算符()返回与表达式的"真实性"相反的布尔值.字符串值是真实的,但是空字符串是假的.

通过将NOT运算符应用于表达式:

!(Name=prompt('What is your name?', 'Name'))
Run Code Online (Sandbox Code Playgroud)

...循环将继续,直到Name变量具有值.

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