如果我跑
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)等。有人可以帮我理解差异以及此函数的工作原理
答案 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()