0

我是 javascript 的新手,所以这可能是一个我无法弄清楚的简单修复。

我正在编写一个简单的脚本来计算闰年、狗年和五岁。

var age = prompt ("what's your age?");

var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

document.write(dog, leapyear, plusFive);

JS 没有计算年龄 + 7。它写的是年龄 + 7。所以如果我在年龄提示中写 15,它将在浏览器中打印 157.(15) 和 (7) 我理解并知道为什么。但我如何让它来计算数学。

它实际上返回 1573.75155

谢谢

4

5 回答 5

1

就像大家一直在说的那样,prompt返回一个字符串,因此需要对其进行转换。有很多方法可以做到这一点,其中一些已经提到过:

parseInt('123')
parseFloat('123')
Number('123')

这些可能是最常见的,并且取决于上下文也很可能是最清晰和最直观的方法。还有一些非常简洁和有趣的方法可以将字符串转换为数字,具体取决于您想要哪种数字。例如,要将字符串中的数字转换为浮点数,您可以在其前面加上+运算符:

+'1.23'

这看起来真的很违反直觉,特别是因为4 + '1.23'will 实际上 return 41.23。发生什么了?好吧,+运算符,当用作一元运算符时(即,它在右侧只有一个操作数)将始终将操作数的值转换为数字。比较这两个(在 javascript 控制台中尝试):

4 + '1.23' // returns 41.23
4 + +'1.23' // returns 5.23; the second + is a unary operator

在诸如此类的人为示例中,它的阅读效果确实很差,因此您可能不想在任何地方使用此技巧。但是在您的代码中,它读起来很好:

var age = +prompt("What's your age?")
var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

如果您了解一元加运算符的工作原理(它真的不是火箭手术),那么您可以获得一些简洁但非常易于理解的结果。

一元运算+符将始终将值转换为 a Number,即浮点数。现在,您可能需要一个整数,在这种情况下,您可以使用按位非运算符两次,如下所示:

4 + ~~'1.23' // returns 5; note the double operator

此运算符首先将值转换为整数,然后返回值的按位补码,这意味着所有位都被反转。使用它两次意味着我们得到补码的补码,即原始值,但这次是整数而不是浮点数。

希望这是有益的!

于 2013-10-24T23:31:25.257 回答
0

现在 Javascript 将输入作为字符串处理,字符串age也是如此。您将要使用该函数将其转换为 int parseInt(age)

官方文档

另外,我建议您阅读有关JS 中的类型的内容

于 2013-10-24T22:47:25.697 回答
0

根据您是否要接受非整数年龄来使用parseInt(age)或使用。parseFloat(age)

于 2013-10-24T22:47:28.903 回答
0

您的提示将您的数字作为字符串返回,因此当您计算 15 + 7 时,它实际上只是将“7”连接到“15”。

您需要将字符串转换为数字:

var age = prompt ("what's your age?");
age = parseInt(age,10);     // Converts to an integer
                            // parseFloat(age) will allow fractional ages

var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

document.write(dog, leapyear, plusFive);
于 2013-10-24T22:48:51.090 回答
0

年龄将被视为字符串,因此字符串加 int 导致字符串您必须将年龄转换为 int :

var age= parseInt(prompt("what's your age"));

更新...

于 2013-10-24T22:49:34.087 回答