此代码执行的是字符串连接,而不是数字加法。 如何指定提示字段输入的类型(如:数字、字符串)。
var jonage = prompt("enter the johns age");
var jonHeight = prompt("enter the johns height");
var jonScore = jonHeight + jonage * 5;
console.log(jonScore);
最佳答案
prompt
是非常基本的,除了浏览器默认的方式(例如,没有换行符)之外,没有提供任何方式来约束输入。
相反,之后将字符串转换为数字。有很多方法可以做到这一点:
- 一元
+
:var jonage = +prompt("输入约翰年龄");
数字
:var jonage = Number(prompt("输入约翰年龄"));
parseInt
:var jonage = parseInt(prompt("输入约翰年龄"));
parseFloat
:var jonage = parseFloat(prompt("输入约翰年龄"));
一元+
和数字
:
...以同样的方式工作:
- 如果可能,它们会将整个字符串转换为数字,如果整个字符串无法转换为数字,则生成
NaN
。所以+"123abc"
是NaN
。 - 它们将空字符串 (
""
) 转换为0
(令人惊讶)。 - 它们遵循 JavaScript 语法来指定基数(基数),因此
+"0x10"
为 16,+"0o10"
为8
>.
parseInt
- 仅转换第一个无效字符之前的尽可能多的字符串,而不是整个字符串。所以
parstInt("123abc")
是123
。 - 将空字符串 (
""
) 转换为NaN
(不是0
)。 - 遵循用于指定数字基数(基数)的 JavaScript 语法,例如,
parseInt("0x10")
是 16。 - 另外允许您显式指定基数作为第二个参数,以强制它将输入视为采用该数字基数:
parseInt("0x10", 10)
为0
(因为x
无效,0x
不再被视为指示数字基数。此使用 对于十进制很重要,以防最终用户输入诸如"010"
之类的字符串,并且浏览器实现了“旧版”八进制(前导0
而不是前导0o
),但自从parseInt
被正式不允许这样做以来,已经过去八年了(自 5th edition spec 以来)。 - 顾名思义,仅转换字符串中定义整个数字(整数)的部分。
parseFloat
与parseInt
类似,但处理小数而不处理基数前缀。 parseFloat("0x16")
是 0
,因为 x
无效(因为它不执行基数前缀)。
关于javascript - 在提示中指定变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227631/