Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[js] 第35天 请你解释一个为什么10.toFixed(10)会报错? #130

Open
haizhilin2013 opened this issue May 20, 2019 · 11 comments
Open
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

第35天 请你解释一个为什么10.toFixed(10)会报错?

@haizhilin2013 haizhilin2013 added the js JavaScript label May 20, 2019
@xiangshuo1992
Copy link
Contributor

xiangshuo1992 commented May 21, 2019

哦~~,原来是这样啊
之所以会报错,是因为在这里的 . 发生了歧义,它既可以理解为小数点,也可以理解为对方法的调用。
因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。

所以我们可以这样修改下:

(10).toFixed(10)
10..toFixed(10)
10 .toFixed(10)
10.0.toFixed(10)

当然出现这个报错是因为前面这个数是整数,如果本来就是小数就不会出现这个报错。

@myprelude
Copy link

10.toFixed(10) // Uncaught SyntaxError: Invalid or unexpected token
(10).toFixed(10)  // "10.0000000000"

原因是js解释器对.的解释发生了歧义导致。

@kokokele
Copy link

. 当成float了

@Konata9
Copy link

Konata9 commented Aug 31, 2019

在我们的直觉上,10.toFixed(10) 是把整数的 10 转为浮点数并且保留 10 位小数部分。

但实际上会出错,是因为 JS 的解释器对 . 操作符产生了歧义。在 JS 中 . 可以表示小数和从对象中取值。在这个例子中, 由于 10 是整数,所以在 10. 默认是小数点,因此会报错。

解决的办法有下面几种:

  • (10).toFixed(10) 个人喜欢这种,看起来舒服一点
  • 10..toFixed(10)

参考文章:
Javascript 的语法歧义之点“.”

@xcLtw
Copy link

xcLtw commented Nov 6, 2019

歧义之前没有注意到,会使用()包裹的形式并认为是进行了隐形转换或者说是定义运算优先级,歧义的说法更合适。而且不使用括号也会发生原生值10Number对象10的隐性转换,之前的想法不严谨

@blueRoach
Copy link

原因是 toFixed前面跟一个整数时,他会把10.toFixed()这个“.”误解为小数点
所以解决方法可以把10用变量保存起来
楼上大佬的方法也可以
10..toFixed(10)
10 .toFixed(10)
(10).toFixed(10)
10.0.toFixed(10)

@MrZ2019
Copy link

MrZ2019 commented Oct 21, 2020

```js
10.toFixed(10) // Uncaught SyntaxError: Invalid or unexpected token
(10).toFixed(10)  // "10.0000000000"

原因是js解释器对.的解释发生了歧义导致。

@github-cxtan
Copy link

哦~~,原来是这样啊
之所以会报错,是因为在这里的 . 发生了歧义,它既可以理解为小数点,也可以理解为对方法的调用。
因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。

所以我们可以这样修改下:

(10).toFixed(10)
10..toFixed(10)
10 .toFixed(10)
10.0.toFixed(10)

当然出现这个报错是因为前面这个数是整数,如果本来就是小数就不会出现这个报错。

@xiaoqiangz
Copy link

原因是 toFixed前面跟一个整数时,他会把10.toFixed()这个“.”误解为小数点
所以解决方法可以把10用变量保存起来
(10).toFixed(10)
10..toFixed(10)

2 similar comments
@xiaoqiangz
Copy link

原因是 toFixed前面跟一个整数时,他会把10.toFixed()这个“.”误解为小数点
所以解决方法可以把10用变量保存起来
(10).toFixed(10)
10..toFixed(10)

@xiaoqiangz
Copy link

原因是 toFixed前面跟一个整数时,他会把10.toFixed()这个“.”误解为小数点
所以解决方法可以把10用变量保存起来
(10).toFixed(10)
10..toFixed(10)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests

10 participants