为什么转换为字符串
我有这个功能(去低谷雄辩的Javascript教程第3章)数(基本的JavaScript功能):为什么转换为字符串
function absolute(number) {
if (number < 0)
return -number;
else
return number;
}
秀(绝对(提示(“选择一个号码”, “”)));
如果我运行它并输入-3,输出将为3作为expectet,但如果我输入3,输出将是“3”(带双引号)。我可以通过改变
return number;
到 回报个数(个)得到解决;
但为什么这是必要的?我错过了什么?
prompt()
总是返回一个字符串,但是当您输入一个负数时,它将被传递给-number
调用并隐式转换为Number
。如果您将其传递给正面,则不会发生这种情况,并且直接返回prompt()
收到的值。
可以,因为你发现,与投它,或者你可以使用parseInt(number, 10)
,或者你可以做-(-number)
再次翻转负,那么积极,或更明显在评论中指出,+number
。 (不要做--number
,将其转换为一个号码,然后递减它)
或者只是'+号码' – SLaks 2012-02-27 19:49:24
@SLaks确实,过度复杂是我的中间名。 – 2012-02-27 19:50:44
JavaScript没有强类型。
number
来自prompt()
函数,它返回一个字符串。
既然你没有做任何改变它的类型,它仍然是一个字符串。
-number
隐式转换并返回一个实际的数字。
如果您有需要被转换为数字的字符串,请执行以下操作:
var numString = '3';
var num = parseInt(numString);
console.log(num); // 3
的JavaScript执行类型之间的自动转换。您输入的“号码”很可能是字符串(您可以通过显示typeof(number)
的结果来验证)。
-
不会将“字符串”作为参数,因此它将首先转换为数字并且会被否定。您可以使用一元+
获得相同的行为:typeof(+ "3")
是typeof("3")
是字符串时的数字。
同样发生的二进制-
- 将操作数转换为数字。 +
是因为它与两个字符串"1"+"2"
为 “12” 的工作更有趣,但1+2
为3
@mgraph:尝试'parseInt函数( “042”)' – SLaks 2012-02-27 19:44:59
返回34 ... lolwut? – 2012-02-27 19:47:34
@NickBeranek:它是八进制的。你需要强制它解析为十进制,加上',10' – SLaks 2012-02-27 19:49:07