1

56.toString不工作会抛出异常。56..toString工作正常 。

谁能解释这两种说法有什么区别?

56.toString(); //throws exception
56..toString(); //Works Fine.

这个怎么运作?

4

3 回答 3

3

数字文字有些特殊,因为属性访问.可以与小数点混为一谈.

当解析器遇到56.它时,它期望一个数字(或什么都没有)跟随它。当你写作时,56..toString()你得到的toString()56.0

于 2012-11-26T07:00:22.293 回答
2

这对 toString() 方法没有问题,只是 56。toString 会认为它是 56.0,但它没有 '0',所以它会失败。

工作正常或像这样:

(56.).toString()

或者

56..toString()
于 2012-11-26T07:22:40.030 回答
0

这里的问题是当你输入

56.toString()

JavaScript 认为 56 是一个变量名,而您正试图访问它的 toString() 方法。但这不起作用,因为 56 不是变量,甚至不是有效的变量名,因此会导致编译错误。(变量名必须以字母开头)

在这里查看 JS 变量命名规则

但是当你在 56 (56.) 后面添加一个点时,它会变成一个数字文字,语言会为此创建一个 Number 类的实例,然后尝试解析 Number 实例上的 toString() 方法。由于 Number 类定义了一个名为 toString() 的方法,然后它就可以工作了。

56..toString();

相当于

(new Number(56.)).toString();

这里要理解的关键是数字文字(56.)和方法访问运算符(variable.methodName())之间的区别

于 2012-11-26T07:58:02.763 回答