我有这个功能(通过Eloquent Javascript Tutorial第3章):
function absolute(number) {
if (number < 0)
return -number;
else
return number;
}
show(绝对(提示(“选择一个数字”,“”)));
如果我运行并输入-3,则输出将为3,但如果我只输入3,则输出将为“3”(带双引号)。我可以通过改变
来解决return number;
要 return Number(number);
但为什么这是必要的?我错过了什么?
答案 0 :(得分:2)
prompt()
始终返回一个字符串,但是当您输入一个负数时,它会被转移到-number
调用并隐式转换为Number
。如果你传递一个肯定的话就不会发生这种情况,prompt()
收到的值会直接返回。
您可以,如您所发现的那样,使用Number()
投射它,或者您可以使用parseInt(number, 10)
,或者您可以执行-(-number)
将其翻转为负数,然后再次为正数,或者更明显正如评论中所指出的,+number
。 (不要执行--number
,将其转换为数字然后递减它)
答案 1 :(得分:1)
Javascript没有强类型。
number
来自prompt()
函数,它返回一个字符串
由于您没有做任何改变其类型的事情,因此它仍然是一个字符串。
-number
隐式转换并返回实际数字。
答案 2 :(得分:1)
如果您的字符串需要转换为数字,请执行以下操作:
var numString = '3';
var num = parseInt(numString);
console.log(num); // 3
答案 3 :(得分:0)
JavaScript在类型之间执行自动转换。您传入的“号码”很可能是字符串(您可以通过显示typeof(number)
的结果进行验证。
-
不会将“string”作为参数,因此它将首先转换为数字而不是否定。您可以使用一元+
获得相同的行为:typeof(+ "3")
是typeof("3")
为字符串时的数字。
二进制-
也是如此 - 将操作数转换为数字。 +
更有趣,因为它使用两个字符串"1"+"2"
为“12”,但1+2
为3。