为什么转换为字符串

问题描述:

我有这个功能(去低谷雄辩的Javascript教程第3章)数(基本的JavaScript功能):为什么转换为字符串

function absolute(number) { 

    if (number < 0) 
    return -number; 
    else 
    return number; 
} 

秀(绝对(提示(“选择一个号码”, “”)));

如果我运行它并输入-3,输出将为3作为expectet,但如果我输入3,输出将是“3”(带双引号)。我可以通过改变

return number; 

到 回报个数(个)得到解决;

但为什么这是必要的?我错过了什么?

+0

@mgraph:尝试'parseInt函数( “042”)' – SLaks 2012-02-27 19:44:59

+0

返回34 ... lolwut? – 2012-02-27 19:47:34

+0

@NickBeranek:它是八进制的。你需要强制它解析为十进制,加上',10' – SLaks 2012-02-27 19:49:07

prompt()总是返回一个字符串,但是当您输入一个负数时,它将被传递给-number调用并隐式转换为Number。如果您将其传递给正面,则不会发生这种情况,并且直接返回prompt()收到的值。

可以,因为你发现,与​​投它,或者你可以使用parseInt(number, 10),或者你可以做-(-number)再次翻转负,那么积极,或更明显在评论中指出,+number。 (不要做--number,将其转换为一个号码,然后递减它)

+1

或者只是'+号码' – SLaks 2012-02-27 19:49:24

+0

@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