javascript - 当 x 来自提示函数时,为什么 typeof x 永远不会是 'number'?

标签 javascript

我无法让第一个函数(如下)正常工作。我希望它询问用户的年龄,并有两种可能的结果。如果用户输入正确的值(即正数),它应该返回年龄。另一方面,如果用户输入不正确的值(字符串、空、未定义、负数),则应显示一条警报消息,并让用户重复该过程,直到输入并返回正确的值。

function age_of_user() {
    let age_entered = prompt("Enter Your Age:"); 
    while (typeof age_entered !== "number" || age_entered < 0) {
       alert("You entered an incorrect value. Please enter correct age.");
       age_entered = prompt("Enter Your Age:");
    }   
return age_entered;
}

function confirm_age() {
    let age = age_of_user();
    if (age < 18) {
        alert("Sorry! You need to be an adult to view content.");
    }
    else {
        alert("Welcome to our site.");
    }
}

confirm_age();

最佳答案

正如评论中提到的,prompt() 函数始终将输入捕获为字符串,即使输入是有效数字也是如此。要检查它是否是数字,您可以尝试使用 parseInt(age_entered) 解析返回的字符串(如果您想允许非整数年龄,则可以使用 parseFloat ,尽管这样' d 对我来说似乎很奇怪),如果你返回一个数字,则输入是好的 - 如果你返回 NaN,则它无效。

这是根据这种理解更新的脚本:

function age_of_user() {
    let age_entered = parseInt(prompt("Enter Your Age:")); 
    while (Number.isNaN(age_entered) || age_entered <= 0) {
       alert("You entered an incorrect value. Please enter correct age.");
       age_entered = parseInt(prompt("Enter Your Age:"));
    }   
return age_entered;
}

function confirm_age() {
    let age = age_of_user();
    if (age < 18) {
        alert("Sorry! You need to be an adult to view content.");
    }
    else {
        alert("Welcome to our site.");
    }
}

confirm_age();

关于javascript - 当 x 来自提示函数时,为什么 typeof x 永远不会是 'number'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991054/

相关文章:

javascript - 使用 jQuery 删除选择列表的选项返回此错误 "unable to get property length of undefined or null reference"

javascript - 是否可以流动子 div 并使用水平溢出使它们填充主 div?

javascript - 如何使用 gulpjs 将数组值替换为另一个数组中的值

javascript - Angular Google map 信息窗口 HTML

javascript - 使用CSS翻转图像

c# - 区分独特的设备连接

javascript - React Native 不触发 Console.log

javascript - 逐步发出 ajax 请求

javascript - 在所有测试后 Jest/TypeORM 清除数据库

javascript - 以响应式表单提交读取属性值