number toString()方法返回number和variable的不同值

时间:2016-11-03 19:25:29

标签: javascript

如果我跑

var num = 23;
var n = num.toString();
console.log(n)

按预期记录23,但如果我将toString()直接应用于某个数字,

var n = 15.toString();
console.log(n)

它会抛出错误:

Uncaught SyntaxError: Invalid or unexpected token.

我注意到它也适用于num变量中的十进制值(如.3,.99,2.12,99.1)等。有人可以帮我理解差异以及此函数的工作原理

4 个答案:

答案 0 :(得分:6)

JavaScript解析按预期工作。您已声明以下内容:

23.toString()

我们将此视为Integer,并在其上调用函数。

解析器没有。解析器看到尝试声明浮点文字。解析器使用它:

[(+|-)][digits][.digits][(E|e)[(+|-)]digits]

它假定您声明Floating-Point Literal,因为它是:

  • 不是变量,因为它不以字母或可接受的字符开头
  • 是一个数字文字,因为它以数字字符
  • 开头
  • 是一个浮点数,因为它有一个小数点。

如果你真的,为了所有意图和目的,想要打电话给23.toString(),行动方针就是隔离文字,如下:

(23).toString(); //interprets 23 as literal

23..toString(); //interprets 23. as literal

话虽这么说,JavaScript足够灵活,知道你想在大多数情况下使用23作为字符串。编译好了。

var foo = "The answer is " + 42;  

这样做。

var bar = "39" - 0 + 3; //42

这不是。

var baz = "39" + 3; //393!!! 

答案 1 :(得分:3)

我相信JavaScript解析器根本不允许您直接在文字上调用方法。

但是你可以这样做......

var n = (15).toString();
console.log(n);

......它会起作用。

修改

谢谢@apsillers的解释。我不知道。数字上的第一个点被视为数字的一部分,因此问题。 1.1.toString()有效。有趣。

答案 2 :(得分:1)

我无法解释原因,但如果你这样做

23..toString()

它有效。

另一种转换为字符串的方式:

23 + '';

yay Javascript。

答案 3 :(得分:1)

当您将其存储为num为23时,它是分配给它的值。 当你打电话给23.toString()时,它认为它是23(小数点)和一些没有意义的单词tostring。

所以你要做的就是在之后添加另一个小数点,让它知道它是23.0

你得到的是23.(invisibleZeroHere).toString() AKA 23..toString()