为什么2.toString()会抛错
2019-01-15 本文已影响0人
奔跑的丸子129
在 JavaScript 里,Number 类型有很多方法,包括 toString()、toFixed() 等等,通常调用时都会先定义一个变量,例如
var num = 2;
num.toString(); // "2"
但是如果直接用2.toString(),就会抛出一个异常:“Uncaught SyntaxError: Invalid or unexpected token”。以前我一直以为是数字字面量不能调用方法,也没有去深究,今天看到网站别人博客上用2..toString()写法能正常运行并得出正确结果,才仔细查看了下原因:
之所以会报错,是因为在这里的 . 发生了歧义。它既可以理解为小数点,也可以理解为对方法的调用,问题就出在这里,我们想要后一种理解,而实际上,因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。我们也可以看下抛出的异常信息:“标识符紧跟于一个数字字面量之后。”说明 2.toString() 在解释器看来其实是:
(2.)toString();
所以只要再加上一个点就可以了:2..toString(),第一个点是数字的一部分,2. 被自动解释为整数值 2,而第二个点则是调用方法。
下面几种写法也是可行的:
(2).toString();
2 .toString(); //加个空格
2.0.toString();
抛出异常仅限于数字是整数的情况,如果数字本身就含有小数点,比如 2.6.toString() ,是完全正常的。