IF 语句中的 Javascript“NaN”[重复]
Posted
技术标签:
【中文标题】IF 语句中的 Javascript“NaN”[重复]【英文标题】:Javascript "NaN" in an IF Statement [duplicate] 【发布时间】:2021-05-29 21:50:58 【问题描述】:这是一个关于 IF 语句中 NaN 的初学者 JS 问题。我有下面的代码提示用户输入一个数字,程序将生成一个介于 1 和用户输入之间的随机数。但是,如果用户没有输入数字,它会提示用户重试并输入有效数字。
const userInput = prompt("Please enter a number.");
const userNumber = parseInt(userInput);
if (userNumber)
const randomNumber = Math.floor( Math.random() * userNumber ) + 1;
console.log(`$randomNumber is a number between 1 and $userNumber`);
else
console.log(`Please enter a valid number.`);
我的问题是 IF 语句的 userNumber 部分。条件基本上是询问 IF userNumber 是一个数字,然后输出随机数。但是为什么它只是简单地写在条件中的变量,而不是 if (userNumber != NaN) 或 if (userNumber == number) 之类的条件?为什么它只是条件中的变量?
对我来说,阅读那行代码我在想:“......如果 userNumber 是什么?在 userNumber 之后什么都没有,那么条件是什么?”
【问题讨论】:
这不是if (userNumber)
所做的。它检查它是否真实。因为它是parseInt
的返回值,所以它将是number
类型,并且该类型中只有两个值不是truthy:NaN
...和0
。如果用户输入0
,它会将其视为无效数字而忽略。您可能还想更好地处理负数...
如果要专门测试NaN
,请使用if( isNaN(userNumber))
【参考方案1】:
你的怀疑是对的,
if(userNumber) ...
将测试userNumber
是否为“真实”,即它将测试它是否具有不同于0 的值。输入0
将严格地说是数字并且在这方面if-condition 可能无法按预期进行测试。
另一方面,它也可以被视为写作的捷径:
if (!isNaN(userNumber) && userNumber!=0)...
【讨论】:
【参考方案2】:当控制台记录时,NaN 是 randomNumber 变量。 当您将 undefined 作为参数传递时,数学方法返回 NaN。
const userNumber = undefined;
const randomNumber = Math.floor( Math.random() * userNumber ) + 1;
console.log(`$randomNumber is a number between 1 and $userNumber`);
使用 userNumber 触发条件,可以是数字也可以是单词,因为 userInput 包含 truthy 值:
假值:未定义、空值、0、“”、假 真值:1、“0”、 “字符串”,真
【讨论】:
【参考方案3】:在 javascript 条件语句中检查真实值并进行强制类型转换。不需要在 If 语句中显式进行比较。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else
https://developer.mozilla.org/en-US/docs/Glossary/Truthy
【讨论】:
【参考方案4】:Mozilla 说;
isNaN()
函数确定一个值是否为 NaN。注意,isNaN 函数内部的强制转换有一些有趣的规则;您也可以使用 ECMAScript 2015 中定义的 Number.isNaN()
。
function milliseconds(x)
if (isNaN(x))
return 'Not a Number!';
return x * 1000;
console.log(milliseconds('100F'));
// expected output: "Not a Number!"
console.log(milliseconds('0.0314E+2'));
// expected output: 3140
More Details
【讨论】:
以上是关于IF 语句中的 Javascript“NaN”[重复]的主要内容,如果未能解决你的问题,请参考以下文章