用于检查 NaN 和空字符串的 If...else 语句在 JavaScript 中不起作用
If...else statements to check for NaN and empty string not working in JavaScript
我使用函数重构了 FizzBuzz,除函数中用于验证用户输入 (validateValue) 的两个 if..else 语句外,一切正常。我想提醒用户不允许使用空字符串、小数和 NaN。检查小数的语句有效,但不适用于空字符串或 NaN。当我输入一个空字符串或NaN时,出现没有小数的提示。我想使用 vanilla JavaScript,而不是 jQuery 来解决这个问题。
这里是 JavaScript:
function getValue(message) {
var msg = "Please enter a number from 1 to 100.";
if (message) {
msg = message;
}
return parseInt(prompt(msg));
}
function validateValue(num) {
if (num === "") {
return getValue("Please type something.");
} else if (num%1 !== 0) {
return getValue("No decimals allowed.");
} else if (isNaN(num)) {
return getValue("That is not a number!");
} else {
return num;
}
}
function fizzBuzz(num) {
for (var i = 1; i <= num; i++) {
if (i%15 === 0) {
document.getElementById("list").innerHTML += "FizzBuzz<br>";
}
else if (i%3 === 0) {
document.getElementById("list").innerHTML += "Fizz<br>";
}
else if (i%5 === 0) {
document.getElementById("list").innerHTML += "Buzz<br>";
}
else {
document.getElementById("list").innerHTML += i + "<br>";
}
}
}
var value = validateValue(getValue());
fizzBuzz(value);
这里是 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>FizzBuzz Refactor</title>
</head>
<body>
<div>
<p>Your FizzBuzz results:</p>
<ul id="list">
</ul>
</div>
<script type="text/javascript" src="app.js"></script>
</body>
</html>
你可能想要这样的东西:
function validateValue(num) {
if (num === "") {
return getValue("Please type something.");
}
num = parseFloat(num);
if (isNaN(num)) {
return getValue("That is not a number!");
} else if (num%1 !== 0) {
return getValue("No decimals allowed.");
} else {
return num;
}
}
字符串不能是 NaN。所以在检查它是否为 NaN 之前,您需要尝试将其转换为数字。
谢谢大家!这是我的解决方案,已注释掉:
function getValue(message) {
var msg = "Please enter a number from 1 to 100."; // default message
if (message) {
msg = message;
}
return prompt(msg); // return prompt with appropriate message based on value
}
function validateValue(num) {
if (num === "") {
return getValue("Please type something."); // check for empty string
}
num = parseFloat(num); // converts string to floating number
if (isNaN(num)) {
return getValue("That is not a number!"); // check for NaN
} else if (num%1 !== 0) {
return getValue("No decimals allowed."); // check for decimals
} else {
return num;
}
}
您可以尝试这样的操作:
function validate(str) {
if (validateEmpty(str)) {
console.log("Input is emply");
} else if (validateNum(str)) {
console.log("Value is numeric");
} else {
console.log("Invalid Input");
}
}
function validateEmpty(str) {
return str === undefined || str == null || str.toString().trim().length === 0;
}
function validateNum(str) {
var reg = /[0-9]/i;
return reg.test(str);
}
(function() {
var a = "";
validate(a);
a = "123.46";
validate(a);
a = "123.46.57";
validate(a);
a = "absl123.46.57";
validate(a);
a = "test";
validate(a);
})()
我使用函数重构了 FizzBuzz,除函数中用于验证用户输入 (validateValue) 的两个 if..else 语句外,一切正常。我想提醒用户不允许使用空字符串、小数和 NaN。检查小数的语句有效,但不适用于空字符串或 NaN。当我输入一个空字符串或NaN时,出现没有小数的提示。我想使用 vanilla JavaScript,而不是 jQuery 来解决这个问题。
这里是 JavaScript:
function getValue(message) {
var msg = "Please enter a number from 1 to 100.";
if (message) {
msg = message;
}
return parseInt(prompt(msg));
}
function validateValue(num) {
if (num === "") {
return getValue("Please type something.");
} else if (num%1 !== 0) {
return getValue("No decimals allowed.");
} else if (isNaN(num)) {
return getValue("That is not a number!");
} else {
return num;
}
}
function fizzBuzz(num) {
for (var i = 1; i <= num; i++) {
if (i%15 === 0) {
document.getElementById("list").innerHTML += "FizzBuzz<br>";
}
else if (i%3 === 0) {
document.getElementById("list").innerHTML += "Fizz<br>";
}
else if (i%5 === 0) {
document.getElementById("list").innerHTML += "Buzz<br>";
}
else {
document.getElementById("list").innerHTML += i + "<br>";
}
}
}
var value = validateValue(getValue());
fizzBuzz(value);
这里是 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>FizzBuzz Refactor</title>
</head>
<body>
<div>
<p>Your FizzBuzz results:</p>
<ul id="list">
</ul>
</div>
<script type="text/javascript" src="app.js"></script>
</body>
</html>
你可能想要这样的东西:
function validateValue(num) {
if (num === "") {
return getValue("Please type something.");
}
num = parseFloat(num);
if (isNaN(num)) {
return getValue("That is not a number!");
} else if (num%1 !== 0) {
return getValue("No decimals allowed.");
} else {
return num;
}
}
字符串不能是 NaN。所以在检查它是否为 NaN 之前,您需要尝试将其转换为数字。
谢谢大家!这是我的解决方案,已注释掉:
function getValue(message) {
var msg = "Please enter a number from 1 to 100."; // default message
if (message) {
msg = message;
}
return prompt(msg); // return prompt with appropriate message based on value
}
function validateValue(num) {
if (num === "") {
return getValue("Please type something."); // check for empty string
}
num = parseFloat(num); // converts string to floating number
if (isNaN(num)) {
return getValue("That is not a number!"); // check for NaN
} else if (num%1 !== 0) {
return getValue("No decimals allowed."); // check for decimals
} else {
return num;
}
}
您可以尝试这样的操作:
function validate(str) {
if (validateEmpty(str)) {
console.log("Input is emply");
} else if (validateNum(str)) {
console.log("Value is numeric");
} else {
console.log("Invalid Input");
}
}
function validateEmpty(str) {
return str === undefined || str == null || str.toString().trim().length === 0;
}
function validateNum(str) {
var reg = /[0-9]/i;
return reg.test(str);
}
(function() {
var a = "";
validate(a);
a = "123.46";
validate(a);
a = "123.46.57";
validate(a);
a = "absl123.46.57";
validate(a);
a = "test";
validate(a);
})()