最近我发现这完全有效:
1..toString(); //"1"
对我来说,它首先看起来有点奇怪,但经过进一步的探索,我发现它的工作原理是因为浏览器会将第一个1.
视为一个数字。
这引出了我们的问题。如果我在号码上拨打.toString
:
1.toString(); //SyntaxError
它不起作用。但是,如果我这样做:
1.0.toString(); /*or*/ 1..toString(); //"1"
它有效。
为什么1
和1.0
之间存在差异?我以为JavaScript中没有数字类型?为什么小数点很重要?
答案 0 :(得分:2)
它与1
或1.0
的类型没有太大关系,但是lexer解析你的代码的方式。一串数字后面的句点被视为小数点而不是类成员访问(.
)运算符。
用括号括起来解决了这个问题:
(1).toString();
答案 1 :(得分:1)
您收到语法错误,因为1.toString()
尝试在浮点值上调用toString()
但不使用点访问运算符。
无论是什么解释'。'必须决定它是否作为浮点指示或访问运营商。 Vagueties并不好,所以其中一种可能性优先。在JavaScript的情况下,浮点指示符优先(如peteykun在其答案中所描述的,词法分析器确定哪些代码字符被视为数字的一部分)。
1..toString()
和1.0.toString()
有效,因为浮点已经存在,所以没有不确定性。我们知道,第二个'。' 已成为访问运营商。
答案 2 :(得分:0)
解析器期望一个数字后跟一个点(例如1.)作为浮点文字。这就是1.toString()不起作用的原因
以下内容应该有效(1).toString();