今天早上,当我尝试实施一个无休止的提示系统时,我发现了一些奇怪的事情。
以下代码在2种情况下返回2种不同的输出:
场景1:在第一次提示时输入数字,然后确定
输出1: number that was entered
场景2:取消第一个提示,然后输入数字和确定
输出2: undefined
我很困惑为什么会这样。首先,当我在if语句中检查时,它是如何返回undefined的?其次,我的印象是,在JavaScript中,undefined意味着已经声明了一个变量,但尚未分配,在这种情况下,我正在分配var number
。
var number = null;
number = Prompt();
$("p").html("Number was " + number);
function Prompt()
{
var input = prompt("Enter a number", "");
if(input === null || input === "" || input === undefined || isNaN(input))
Prompt();
else
return input;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p></p>
答案 0 :(得分:5)
只有一个代码路径返回一个值,使其从递归调用返回。在JavaScript中,如果函数在没有return语句的情况下结束,则返回undefined
function Prompt()
{
var input = prompt("Enter a number", "");
if(input === null || input === "" || input === undefined || isNaN(input))
return Prompt();
else
return input;
}
答案 1 :(得分:3)
window.prompt
始终返回字符串或null
,因此请勿检查undefined
或isNaN
此外,由于window.prompt
会返回一个字符串,因此您需要使用window.parseInt
才能将其可靠地转换为数字。
function Prompt() {
var n = window.parseInt(window.prompt("Enter a number"), 10)
if (Number.isNaN(n))
return Prompt()
else
return n
}
alert("Your number is: " + Prompt())
&#13;
答案 2 :(得分:-1)
当第一个提示被取消时,会调用另一个Prompt()迭代,但不会在任何地方捕获它的返回值。然后第一次迭代返回原始未定义的返回值。
Musa的回答显示了解决这个问题的一种方法。另一个是:
function Prompt() {
var input = null;
while(input === null) {
input = prompt("Enter a number", "");
}
return input;
}