我是javascript的新手,所以这可能是一个我无法弄清楚的简单修复。
我正在写一个简单的脚本来计算年龄Leapyear,Dog years and plus Five。
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
感谢
答案 0 :(得分:1)
就像大家一直在说的那样,prompt
返回一个字符串,因此需要进行转换。有很多方法可以做到这一点,其中一些已经提到:
parseInt('123')
parseFloat('123')
Number('123')
这些可能是最常见的,取决于上下文也很可能是最清晰直观的方法。还有一些非常简洁有趣的将字符串转换为数字的方法,具体取决于您想要的数字类型。例如,要将字符串中的数字转换为浮点数,可以使用+
运算符作为前缀:
+'1.23'
这看起来非常直观,特别是因为4 + '1.23'
实际上会返回41.23
。发生什么了?好吧,+
运算符在用作unary operator时(也就是说,它只在右侧有一个操作数)将始终将操作数值转换为数字。比较这两个(在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;
如果您了解一元加运算符(它实际上不是火箭手术)的运作方式,那么您可以获得一些不错的简洁但结果非常容易理解。
一元+
运算符将始终将值转换为Number
,即浮点数。现在,您可能需要一个整数,在这种情况下,您可以使用bitwise not operator两次,如下所示:
4 + ~~'1.23' // returns 5; note the double operator
此运算符首先将值转换为整数,然后返回值的bitwise complement,这意味着所有位都被反转。使用它两次意味着我们得到补码的补码,即原始值,但这次是整数而不是浮点数。
希望这是有用的信息!
答案 1 :(得分:0)
现在Javascript将输入作为字符串处理,因此age
是一个字符串。您将要使用函数parseInt(age)
将其转换为int。
另外,我建议你阅读this关于JS中的类型
答案 2 :(得分:0)
使用parseInt(age)
或parseFloat(age)
,具体取决于您是否要接受非整数年龄。
答案 3 :(得分: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);
答案 4 :(得分:0)
将年龄视为字符串,因此字符串加上int得到字符串,您必须将age转换为int:
var age= parseInt(prompt("what's your age"));
...更新