为什么数字转换为字符串(基本Javascript函数)

时间:2012-02-27 19:42:03

标签: javascript

我有这个功能(通过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);

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

4 个答案:

答案 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。