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

时间:2013-07-05 15:53:46

标签: javascript if-statement

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语句,这是找到最后一个的代码。字。我不明白为什么这种保障不起作用。

非常感谢一些帮助。感谢

7 个答案:

答案 0 :(得分:3)

因为prompt()无条件地返回一个字符串(或null)。它并不试图解析所输入的内容并且去了噢,嘿,它是所有数字。我只会返回一个int而不是#34;。这意味着你的测试基本上没有意义......你永远不会得到任何其他东西而不是字符串,所以你的代码将总是采取其他的'其他'路径。

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

答案 1 :(得分:0)

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

prompt返回一个字符串或null。输入哪些字符并不重要。

答案 2 :(得分:0)

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

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

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

查看它是否为数字

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你有什么期望呢?

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

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

如果您想检查他们是否输入任何内容,您可以检查它是否有非空白值:

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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


... 但是来实现听起来像你正在尝试做的事情 - 如果字符串是一个可以理解为的字符串,则给出不同的结果代表一个数字 - 你可以试试这个:

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

parseFloat()尝试将字符串转换为可能有小数位的数字('浮动')。如果不能,则返回NaN(非数字),一个评估为false的特殊实体类型(但0或-1也是数字,所以我们测试{{1而不是仅使用!== NaN来测试它是否为评估为if( parseFloat(userinput)){的东西。

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

5.0如果你只关心整数。或者,如果您想严格控制字符串中允许的输入类型,请阅读regular expressions