变量不被视为数字

时间:2014-12-10 19:46:17

标签: javascript variables

我向某人解释了一些基本的javascript内容,当一个变量没有被视为数字时发现自己非常尴尬,尽管是一个数字。

此处没有NaN检查,但我们只输入数字。

var number1 = prompt("choose any number");
var number2 = prompt("choose another number");
alert("thank you I will multiply your numbers now!");
var multiplication = function(a, b) {
    var c = a * b;
    alert("the product of " + number1 + " and " + number2 + " is: " + c);
    var number3 = prompt("please choose a number to add to the product.");
    var sum = c + number3;
    alert(sum);
};

multiplication(number1, number2);

似乎变量“number3”不被视为数字,最后一个警报不给出总和,而是将“number3”视为字符串。

当我使用琐碎的事情时,情况变得更好了

var sum = c + +number3;

我无法理解为什么number3不被视为数字,任何想法?我无法向我的朋友解释这一点,不得不羞辱地撤退。

在Chrome和Firefox上累了效果相同。

5 个答案:

答案 0 :(得分:1)

Window.prompt总是返回一个字符串,如果它的数字类似于" 5"则返回事件。还是串。您需要执行从字符串类型到数字的转换。例如,使用Number构造函数:

var number1 = Number(prompt("choose any number"));
var number2 = Number(prompt("choose another number"));

答案 1 :(得分:1)

prompt()返回一个字符串,就像那样简单。 *运算符显然将前两个案例转换为数字,但+也是连接运算符。那么现在发生的是number + string = string。当你执行+number3时,那个(一元+)会转换为数字。所以现在你有number + number = number,这就是你想要的。

答案 2 :(得分:0)

+运算符作为 arithmetic addition operator 字符串连接运算符重载。

对于大多数情况,添加到字符串的值会产生字符串。因为prompt()返回一个字符串,这就是发生的事情。您可以使用一元+将字符串转换回数字(+number3),从而删除等式中的所有字符串。

注意:操作顺序确实很重要

4 + 5 + '1' + 1     // '911'

首先操作4和5(均不是字符串),因此执行算术加法。然后是第一个' 1'遇到,这是一个字符串,所以前面涉及一个字符串,每个+将是一个字符串连接。

答案 3 :(得分:0)

正如大家所解释的那样,你正在通过提示返回strings

只是为了javascript所拥有的乐趣/怪癖。看看如何用数字转换字符串

乘以数字1将自动将所有字符串转换为数字。因此,在提示方面,您可以将prompt1 and prom2 * 1的结果相乘,而您将不会遇到该问题

你也可以做"1" * 1 - > 1整数

更有趣的隐藏javascript功能Hidden Features of JavaScript?

答案 4 :(得分:0)

specification有助于解释自动类型转换的工作原理。如果其中一个操作数是字符串,则+执行字符串连接,而*仅执行数字乘法,因此将操作数转换为数字。

相关问题