为什么这个基本的 if 语句不起作用?JavaScript

Why does this basic if-statement fail to work? JavaScript

本文关键字:语句 不起作用 JavaScript if 为什么      更新时间:2023-09-26
var userinput = prompt("Hello. Please enter a statement and I will repeat the last word");
if(typeof userinput !== "string"){
console.log("This is not a string.");
}

是一个完全的新手,我只是想制作一个简单的脚本来重复您输入的语句的最后一个单词。我添加了此保护措施,以便如果您不输入字符串,它将显示一条消息,但是每当我用数字测试代码时,它都会忽略这部分并仍然执行 else 语句,这是找到最后一个单词的代码。我不明白为什么这种保护措施不起作用。

真的很感激一些帮助。谢谢

因为prompt()无条件(或空(返回字符串。它不会尝试解析输入的内容并"哦,嘿,都是数字。我只会返回一个int"。这意味着你的测试基本上是没有意义的......除了字符串之外,你永远不会得到任何东西,所以你的代码将始终采用"else"路径。

相关文档:https://developer.mozilla.org/en-US/docs/Web/API/window.prompt

>"123"仍然是一个字符串。

prompt返回字符串或 null。输入什么字符并不重要。

提示返回一个字符串。 该字符串可能"2",但它仍然是一个字符串。

您可以使用如下所示的正则表达式进行测试:

var reg = /^'d+$/;
if(reg.test(userinput)){
    console.log("This is a number.");
 }

查看是否为数字

从用户输入接收的所有内容最初都是字符串。您要做的是测试输入是否可以转换为某种数字。

你期望它做什么?

prompt()始终返回一个字符串,因此无论用户输入什么userinput都将始终是一个字符串。如果他们不输入任何内容,它将是一个空白字符串,但仍然是一个字符串。如果他们输入一个数字,它将是一个恰好包含数字字符的字符串。

因此,您的typeof检查将始终失败。

如果你想检查他们是否输入了任何东西,你可以检查它是否有一个非空值:

if(!userinput) {
     //user didn't enter anything.
}

使用 prompt(( 将始终返回一个字符串。所以,你需要的是测试它是否也是一个数字。

if(typeof userinput === "number") {
    console.log("This is also a number.");
} else {
    // only string
}

或者,您也可以使用isNan()来检查"不是数字"。

五个人和计数已经解释说"1"是一个字符串......(如"",一个空字符串(,prompt()返回字符串...


但是为了实现听起来像您正在尝试做的事情 - 如果字符串是可以理解为表示数字的字符串,则给出不同的结果 - 您可以尝试以下操作:

if( parseFloat(userinput) !== NaN ){

parseFloat()尝试将字符串转换为可能具有小数位的数字("浮点数"(。如果不能,则返回NaN(不是数字(,这是一种计算结果为 false 的特殊实体类型(但 0 或 -1 也是如此,它们是数字,因此我们测试!== NaN,而不仅仅是使用 if( parseFloat(userinput)){ 来测试它是否计算为 true (。

正如这些文档所解释的那样,它非常宽容,例如,它会"5 words in this string"解释为5.0

或者parseInt()如果你只关心整数。或者,如果您想严格控制字符串中允许的输入类型,请阅读正则表达式。