Javascript 来自提示符js的意外行为
我正在尝试学习javascript,作为练习的一部分,我决定尝试创建一个21点模拟器来提高我的精确度和技能 下面是程序的一个隔离块。为了简单起见,我使用prompt而不是html界面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 ===
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();”在另一部分。否则未定义的将是返回值