56.toString
不起作用抛出异常。 56..toString
工作正常。
有谁可以解释这两个陈述之间有什么区别?
56.toString(); //throws exception
56..toString(); //Works Fine.
它如何运作?
答案 0 :(得分:3)
数字文字有些特殊,因为属性访问.
可以用小数点.
当解析器遇到56.
时,它需要一个数字(或没有任何数字)来跟随它。当您撰写56..toString()
时,您将获得toString()
的{{1}}
答案 1 :(得分:2)
这对于toString()方法来说不是问题,只是56. toString会认为它是56.0,但它没有'0',所以它会失败。
工作正常或像这样:
(56.).toString()
或
56..toString()
答案 2 :(得分:0)
这里的问题是当你输入
时56.toString()
JavaScript认为56是一个变量名,你试图访问它的toString()方法。但这不起作用,因为56不是变量,它甚至不是有效的变量名,因此导致编译错误。 (变量名必须以字母开头)
Check here for JS variable naming rules
但是当你在56(56.)后面添加一个点时,它就变成了一个数字文字,语言为它创建了一个Number类的实例,然后尝试解析Number实例上的toString()方法。由于Number类定义了一个名为toString()的方法,然后它可以工作。
56..toString();
相当于
(new Number(56.)).toString();
这里要理解的关键是数字文字(56.)和方法访问操作符(variable.methodName())之间的区别