我向某人解释了一些基本的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上累了效果相同。
答案 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有助于解释自动类型转换的工作原理。如果其中一个操作数是字符串,则+
执行字符串连接,而*
仅执行数字乘法,因此将操作数转换为数字。