Skip to content

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

Open
@haizhilin2013

Description

@haizhilin2013
Collaborator

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

Activity

xiangshuo1992

xiangshuo1992 commented on May 21, 2019

@xiangshuo1992
Contributor

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

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

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

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

myprelude

myprelude commented on Jun 13, 2019

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

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

kokokele

kokokele commented on Jul 16, 2019

@kokokele

. 当成float了

Konata9

Konata9 commented on Aug 31, 2019

@Konata9

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

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

解决的办法有下面几种:

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

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

xcLtw

xcLtw commented on Nov 6, 2019

@xcLtw

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

blueRoach

blueRoach commented on Jul 6, 2020

@blueRoach

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

smile-2008

smile-2008 commented on Oct 21, 2020

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

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

github-cxtan

github-cxtan commented on Feb 24, 2022

@github-cxtan

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

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

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

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

xiaoqiangz

xiaoqiangz commented on May 31, 2022

@xiaoqiangz

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

xiaoqiangz

xiaoqiangz commented on May 31, 2022

@xiaoqiangz

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

xiaoqiangz

xiaoqiangz commented on May 31, 2022

@xiaoqiangz

原因是 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    jsJavaScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @kokokele@smile-2008@haizhilin2013@Konata9@xcLtw

        Issue actions

          [js] 第35天 请你解释一个为什么10.toFixed(10)会报错? · Issue #130 · haizlin/fe-interview