1和1.0之间的差异

时间:2014-02-24 09:02:18

标签: javascript

最近我发现这完全有效:

1..toString();  //"1"

对我来说,它首先看起来有点奇怪,但经过进一步的探索,我发现它的工作原理是因为浏览器会将第一个1.视为一个数字。

这引出了我们的问题。如果我在号码上拨打.toString

1.toString();  //SyntaxError

它不起作用。但是,如果我这样做:

1.0.toString(); /*or*/ 1..toString();  //"1"

它有效。

为什么11.0之间存在差异?我以为JavaScript中没有数字类型?为什么小数点很重要?

3 个答案:

答案 0 :(得分:2)

它与11.0的类型没有太大关系,但是lexer解析你的代码的方式。一串数字后面的句点被视为小数点而不是类成员访问(.)运算符。

用括号括起来解决了这个问题:

(1).toString();

答案 1 :(得分:1)

您收到语法错误,因为1.toString()尝试在浮点值上调用toString()但不使用点访问运算符。

无论是什么解释''必须决定它是否作为浮点指示访问运营商。 Vagueties并不好,所以其中一种可能性优先。在JavaScript的情况下,浮点指示符优先(如peteykun在其答案中所描述的,词法分析器确定哪些代码字符被视为数字的一部分)。

1..toString()1.0.toString()有效,因为浮点已经存在,所以没有不确定性。我们知道,第二个'。' 成为访问运营商。

答案 2 :(得分:0)

解析器期望一个数字后跟一个点(例如1.)作为浮点文字。这就是1.toString()不起作用的原因

以下内容应该有效(1).toString();