第35天 请你解释一个为什么10.toFixed(10)会报错?
哦~~,原来是这样啊
之所以会报错,是因为在这里的 .
发生了歧义,它既可以理解为小数点,也可以理解为对方法的调用。
因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。
所以我们可以这样修改下:
(10).toFixed(10)
10..toFixed(10)
10 .toFixed(10)
10.0.toFixed(10)
当然出现这个报错是因为前面这个数是整数,如果本来就是小数就不会出现这个报错。
10.toFixed(10) // Uncaught SyntaxError: Invalid or unexpected token
(10).toFixed(10) // "10.0000000000"
原因是js解释器对.
的解释发生了歧义导致。
. 当成float了
在我们的直觉上,10.toFixed(10)
是把整数的 10 转为浮点数并且保留 10 位小数部分。
但实际上会出错,是因为 JS 的解释器对 .
操作符产生了歧义。在 JS 中 .
可以表示小数和从对象中取值。在这个例子中, 由于 10 是整数,所以在 10.
默认是小数点,因此会报错。
解决的办法有下面几种:
(10).toFixed(10)
个人喜欢这种,看起来舒服一点10..toFixed(10)
参考文章:
Javascript 的语法歧义之点“.”
歧义之前没有注意到,会使用()
包裹的形式并认为是进行了隐形转换或者说是定义运算优先级,歧义的说法更合适。而且不使用括号也会发生原生值10
到Number
对象10
的隐性转换,之前的想法不严谨
原因是 toFixed前面跟一个整数时,他会把10.toFixed()这个“.”误解为小数点
所以解决方法可以把10用变量保存起来
楼上大佬的方法也可以
10..toFixed(10)
10 .toFixed(10)
(10).toFixed(10)
10.0.toFixed(10)
```js 10.toFixed(10) // Uncaught SyntaxError: Invalid or unexpected token (10).toFixed(10) // "10.0000000000"
原因是js解释器对.的解释发生了歧义导致。
```
Most helpful comment
哦~~,原来是这样啊
之所以会报错,是因为在这里的
.
发生了歧义,它既可以理解为小数点,也可以理解为对方法的调用。因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。
所以我们可以这样修改下:
(10).toFixed(10)
10..toFixed(10)
10 .toFixed(10)
10.0.toFixed(10)
当然出现这个报错是因为前面这个数是整数,如果本来就是小数就不会出现这个报错。