1
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 语句,它是找到最后一个的代码单词。我不明白为什么这种保护措施不起作用。

非常感谢一些帮助。谢谢

4

7 回答 7

3

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

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

于 2013-07-05T15:56:18.367 回答
0

你期待它做什么?

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

所以你的typeof检查总是会失败。

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

if(!userinput) {
     //user didn't enter anything.
}
于 2013-07-05T16:00:09.820 回答
0

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

prompt返回一个字符串或空值。输入什么字符并不重要。

于 2013-07-05T15:56:26.423 回答
0

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


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

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

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

正如那些文档所解释的那样,它是相当宽松的,例如它将解释"5 words in this string"5.0.

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

于 2013-07-05T16:07:11.557 回答
0

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

您可以使用这样的正则表达式进行测试:

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

看看它是否是一个数字

于 2013-07-05T15:57:45.570 回答
0

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

于 2013-07-05T15:57:54.427 回答
0

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

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

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

于 2013-07-05T16:01:19.393 回答