JavaScript中的+prompt与prompt有什么区别?

6

如果我只想在提示窗口中输入整数,那么在JavaScript中使用+prompt而不是普通的prompt是否好?在JavaScript标准/规则中是否有关于+prompt的说明?


1
+prompt 是什么? - Sandeep Nayak
2
@SandeepNayak 如果我在使用+prompt时输入一些字符串,它将返回NaN。 - Newcomer
2
@SandeepNayak — https://dev59.com/EGUp5IYBdhLWcg3wrI7T - Quentin
5个回答

5
当您在提示前添加加号时,就会发生以下情况,例如下面所示:
例如:1
var a = prompt("Please enter a number");
console.log(a);
typeof(a);

现在,在例1中,当您输入一个数字并在控制台中检查它时,它会显示一个数字,但是由于该数字位于双引号之间,在JavaScript中它是一个字符串,当您在控制台中打印typeof时,它也会显示为字符串。

例如:- 2

var a = +prompt("Please enter a number");
console.log(a);
typeof(a);

现在当您控制台输出变量 a 和 typeof a 的 eg(2) 时,结果会有所不同,因为我们在提示前添加了+。所以这次我们将提示输入值作为数字而不是字符串。尝试一下,您就会明白我在说什么。


太棒了!!欢迎 :-) - frnt

4

不好意思,这是第

一元加运算符 将响应转换为数字,而不是整数。

它可能会给你一个浮点值,也可能会给你 NaN

如果你想要一个整数,那么你需要检查响应,然后针对响应不是你想要的情况提供一些错误恢复措施。

例如:如果它是一个浮点值,那么你可能只想使用 Math.floor 来转换它。如果它是 NaN,那么你可能想再次提示用户。


0

+promt("...") 的效果是将 promt 命令的结果转换为数字。

这是一个不错的技巧,但并不是一个干净的解决方案。

我建议将用户输入分配给一个变量,然后检查它,如果不符合要求,则抛出异常或错误消息。

var
    input = prompt("Please enter a positive number"),
    inputNum = parseInt(input, 10);

if (isNaN(inputNum) || inputNum < 1)
    alert("You did not enter a positive number.");

1
“转换为正数”——不正确。它并没有强制转换为正数。+"-22.134" 的评估结果是 -22.134 - Quentin
@Quentin 是对的,它只是将变量强制转换为数字,但不强制任何符号(不要被误导以为 + 运算符与正数有关)。你应该纠正这个错误,因为你的 SO 分数给你的帖子高可信度,并且更容易导致错误信息传播。 - kb.
1
谢谢,伙计们。已经修复了。 - lxg

0

因此,在任何数据类型之前放置一个+将其转换为数字。 我尝试过这个:

typeof(+"100") ==> number
typeof(+"12.34") ==> number
typeof(+true) ==> number
typeof(+false) ==> number

事情變得非常奇怪,當我實驗了“undefined”數據類型。例如:

undefined

x = +undefined
typeof(x) ==> Number whilst value of variable x is NaN

那很有道理。parseFloat(undefined) 的结果是NaN,就像 parseFloat('afije')一样。但是NaN的类型是数字。 - RoboticRenaissance

-1

+prompt()只是在prompt()前加上一个+,就像写+"3"或者+"10"一样。它只是尝试将结果转换为数字。


1
它将会把提示返回的字符串转换成数字。 - Quentin
@Quentin 是的,我立刻注意到了。 - Bálint
你还没有回答问题。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接