Javascript number toString()方法为number和variable返回不同的值
如果我跑Javascript number toString()方法为number和variable返回不同的值,javascript,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)等。有人能帮我理解它们之间的区别以
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解析器根本不允许您直接对文本调用方法 不管你怎么做
var n = (15).toString();
console.log(n);
。。。它会起作用的
编辑
感谢@apsillers的解释。我不知道。数字上的第一个点被视为数字的一部分,因此出现了问题<代码>1.1.toString()有效。有趣。我无法解释原因,但如果你这么做了
23..toString()
它起作用了
另一种方法是转换为字符串:
23 + '';
是的,Javascript。当您将它存储到num as 23中时,这是分配给它的值。 当您调用
23.toString()
时,它认为它是23(小数点)和一些没有意义的单词toString
所以你要做的就是在后面再加一个小数点,让它知道它是23.0
然后得到的是
23.(invisibleZeroHere).toString()
AKA 23..toString()JavaScript解析工作正常。您已声明如下:
23.toString()
我们将其视为一个函数,并对其调用函数
解析器没有。解析器看到有人试图声明浮点文本。解析器使用以下方法:
[(+)][数字][.数字][(E | E)[(+)]数字]
它假定您正在声明,因为它是:
- 不是变量,因为它不是以字母或可接受的字符开头
- 是数字文字,因为它以数字字符开头
- 是一个浮点数,因为它有一个小数点
23.toString()
,那么操作过程就是隔离文本,如下所示:
(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!!!
这很有趣。我知道最好不要使用导致错误的语法,但我无法解释为什么一个会中断,而另一个不会!如果要执行console.log('13'.toString());它起作用了!如果数字在括号中,也可以使用,例如
(15).toString()
@Sam这是因为解析器贪婪地将
作为NumericLiteral标记23.
的一部分读取,因此句点不能用作属性访问表达式的一部分。考虑<代码> 23…toSTRIGEN()/CODE >确实有效,因为数值文本不能有两个句点,因此多余的时间段可以自由地成为属性访问表达式的一部分。只是,出现在数字文字上的第一个小数总是被解释为文字的一部分。如果文本有小数点,则可以使用附加点作为属性访问器:1.1.toString()
,15..toString()
,等等。。谢谢
var baz = "39" + 3; //393!!!