JavaScript技术问题:如何仅打印数字,避免输出NaN及非数字字符?
解决仅打印有效数字的问题
原代码的核心问题是判断逻辑错误:NaN和任何值比较的结果都是false,而且prompt返回的是字符串类型,哪怕输入数字也是字符串,没法直接用NaN做判断,所以输入字符时条件永远成立,会直接打印输入内容。
修正方案
- 先把用户输入的内容转成数字类型
- 用严谨的方法判断是否为有效数字
- 处理用户取消输入的情况
修正后的代码
var inputNumber = prompt("What is your Number"); var myName = prompt("What is your name"); // 将输入转为数字,非数字/空输入/取消操作都会得到NaN var myNumber = Number(inputNumber); if (!Number.isNaN(myNumber)) { document.write("My Number is " + myNumber + " "); } else { document.write("This is not a valid number "); } document.write("& My Name is " + myName);
代码说明
Number(inputNumber):把字符串输入转为数字,非数字内容、空输入或用户点取消都会转为NaNNumber.isNaN(myNumber):专门判断值是否为NaN,比全局isNaN()更准确(全局方法会先把非数字类型转成数字,容易出现误判)
如果需要限制输入为整数,可以再加一层判断:
if (!Number.isNaN(myNumber) && Number.isInteger(myNumber)) { document.write("My Number is " + myNumber + " "); } else { document.write("This is not a valid integer "); }
内容的提问来源于stack exchange,提问作者Junaid Khalid
相关产品推荐
相关产品推荐

