This question already has answers here:
Why does 2..toString() work? [duplicate]

(5个答案)


4年前关闭。




如果我跑步
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)等。请问有人可以帮助我了解它们的区别以及此函数的工作原理

最佳答案

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!!!
    

    关于javascript - 数字toString()方法返回数字和变量的不同值。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40409696/

    10-11 06:07
    查看更多