当我试图实现一个无止境的提示系统时,我注意到今天早上有些奇怪的事情。递归提示返回undefined
以下代码返回下2个方案2个不同的输出:
方案1:上第一提示和输入数字确定
输出1:number that was entered
情景2:取消第一提示然后输入数字并确定
输出2:undefined
我困惑,为什么发生这种情况。首先,当我在if语句中检查时,它是如何返回的未定义的?第二,我的印象是,在JavaScript中未定义意味着一个变量已经被声明,但尚未被分配,在这种情况下,我正在分配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>
您应该提到,只有一个字符串是从'prompt'返回。如果'input'实际上是'NaN','isNaN('anystring')'将总是返回'true',而'Number.isNaN'只会返回'true'。推荐'parseInt'等。 – naomik
@naomik:不正确。 'isNaN(“”)=== false'我不知道它为什么返回false,但也许你可以尝试'isNaN(parseFloat(input))' –
@ThomasF谢谢,我不知道,我只是困扰要记住'window.isNaN'是一块垃圾。 'Number.isNaN'更加实用。 – naomik