Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自提示符js的意外行为_Javascript - Fatal编程技术网

Javascript 来自提示符js的意外行为

Javascript 来自提示符js的意外行为,javascript,Javascript,我正在尝试学习javascript,作为练习的一部分,我决定尝试创建一个21点模拟器来提高我的精确度和技能 下面是程序的一个隔离块。为了简单起见,我使用prompt而不是html界面 function askAboutAce(){ var nResponse = 0; var response = 0; response = prompt("Would you like to use the ace as a 1 or 11?"); if(response ===

我正在尝试学习javascript,作为练习的一部分,我决定尝试创建一个21点模拟器来提高我的精确度和技能

下面是程序的一个隔离块。为了简单起见,我使用prompt而不是html界面

function askAboutAce(){
    var nResponse = 0;
    var response = 0;
    response = prompt("Would you like to use the ace as a 1 or 11?");
    if(response === "1" || response === "11"){
        nResponse = Number(response);
        return nResponse;
    }
    else{
        askAboutAce();
    }
}

var x = 2 + askAboutAce();
console.log(x);

var x=2+askAboutAce()模拟玩家先画2,然后画a。当我执行以下操作时,会出现奇怪的行为:如果提示询问我希望如何处理ace,并且我正确响应(即,使用1或11),则返回值是一个数字。但是,如果我的响应不正确(通过输入除1或11之外的任何其他数字),然后最终输入1或11,则返回值为NaN。我发现这种行为非常奇怪,并假设它与使用递归导致的动作堆栈的解析有关。请帮助我理解意外行为。

这是因为在该块中的代码中

if(response === "1" || response === "11"){
    nResponse = Number(response);
    return nResponse;
}
else{
    askAboutAce();
}
没有为else语句返回任何内容。 askAboutAce()中的值刚刚返回到。。。没有

因此,您需要返回该方法的输出

例:


这是因为在此块中的代码中

if(response === "1" || response === "11"){
    nResponse = Number(response);
    return nResponse;
}
else{
    askAboutAce();
}
没有为else语句返回任何内容。 askAboutAce()中的值刚刚返回到。。。没有

因此,您需要返回该方法的输出

例:


javascipt中的每个函数都有一个返回值。如果不指定任何内容,则默认情况下它将是
未定义的
。在“如果”条件下,返回正确的数字。但在“else”条件下,您再次调用函数,该函数可能返回一个数字,但由于您没有返回函数调用的结果,因此引擎将只返回
未定义的
<代码>编号(未定义)
NaN
。将“+”运算符与
undefined
一起使用将尝试将其强制为数字。有更多关于隐性胁迫的规则


使用
返回askAboutAce()在else条件下。

javascipt中的每个函数都有一个返回值。如果不指定任何内容,则默认情况下它将是
未定义的
。在“如果”条件下,返回正确的数字。但在“else”条件下,您再次调用函数,该函数可能返回一个数字,但由于您没有返回函数调用的结果,因此引擎将只返回
未定义的
<代码>编号(未定义)
NaN
。将“+”运算符与
undefined
一起使用将尝试将其强制为数字。有更多关于隐性胁迫的规则


使用
返回askAboutAce()在else条件下。

这是个人偏好,但这里并不需要递归。我认为
askAboutAce
函数的一种更简单、更容易遵循的方法是

function askAboutAce(){
    var response;
    do {
        response = prompt("Would you like to use the ace as a 1 or 11?");
    } while (response !== "1" && response !== "11")

    return Number(response);

}

var x = 2 + askAboutAce();
console.log(x);

这是一个个人偏好,但这里并不需要递归。我认为
askAboutAce
函数的一种更简单、更容易遵循的方法是

function askAboutAce(){
    var response;
    do {
        response = prompt("Would you like to use the ace as a 1 or 11?");
    } while (response !== "1" && response !== "11")

    return Number(response);

}

var x = 2 + askAboutAce();
console.log(x);

prompt返回一个字符串。按cancel返回空值。您可以使用'nResponse=Number(response)| | 0;`为了确保您有一个数字要计算(尤其是加法)。try response=parseInt(prompt())并在上面的场景中检查不带引号的条件,我从未按过取消。我还使用行
nResponse=Number(响应)来补偿字符串我想,我想问的是,为什么第一次输入错误会导致奇怪的行为。这就是我想理解的。您需要使用“return askAboutAce();”在另一部分。否则返回值将为undefined,Prompt将返回字符串。按cancel返回空值。您可以使用'nResponse=Number(response)| | 0;`为了确保您有一个数字要计算(尤其是加法)。try response=parseInt(prompt())并在上面的场景中检查不带引号的条件,我从未按过取消。我还使用行
nResponse=Number(响应)来补偿字符串我想,我想问的是,为什么第一次输入错误会导致奇怪的行为。这就是我想理解的。您需要使用“return askAboutAce();”在另一部分。否则未定义的将是返回值