为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript中给Number添加原型方法为什么一定要加括号

Javascript中给Number添加原型方法为什么一定要加括号

扬帆大鱼 2018-11-15 18:15:00
直接调用Number原型上的方法,如下:10.toString();会报错:Uncaught SyntaxError: Invalid or unexpected token但是,浮点数直接调用就不会出错10.1.toString();//"10.1"看到有这样的解释:数字字面量直接调用方法,只要能够让JavaScript引擎不混淆小数点和对象的点运算符,各种写法都能用,JavaScript会把第一个点理解成小数点(即10.0),把第二个点理解成调用对象属性,从而得到正确结果。比如以下的调用方式都是正确的(10).toString(2)10..toString(2) // "1010"10 .toString(2) // "1010"10.0.toString(2) // "1010"10['toString'](2) // "1010"但是并不懂这里面的作用原理。自己一开始猜测是括号或者点号运算符优先级的原因,把10先转成了number吗?可是觉得这个并不能解释的通。请问大家为什么直接对整数调用原型方法会出错,浮点数就不会?为什么通过以上列出的方式就可以对整数的原型方法进行调用?
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

看到有这样的解释:数字字面量直接调用方法,只要能够让JavaScript引擎不混淆小数点和对象的点运算符,各种写法都能用,JavaScript会把第一个点理解成小数点(即10.0),把第二个点理解成调用对象属性,从而得到正确结果。

我的看法:只要点的意思不歧义,编译器就能正确理解。

(10).toString(2) // "1010"

很显然加了括号,钦点了后面的 . 是 点运算符

10..toString(2) // "1010"

不存在带两个小数点的数字,因此这里也是指 点运算符

https://img1.sycdn.imooc.com//5c10ab0b0001037a03560288.jpg

所以这个 10..toString(2) 其实可以归结为下面一个

10.0.toString(2) // "1010"

浮点数后面的点一定不再是指小数点了,而是指 点运算符

10['toString'](2) // "1010"

obj[key] 这样可以在 obj 中找名字为key的属性。

https://img1.sycdn.imooc.com//5c10ab1a0001076102880115.jpg

10.toString() 报错的原因

原因在于编译器看到这个会有两种解读:

1. (10.0).toString(); 
2.  10   .toString();


查看完整回答
反对 回复 2018-12-12
  • 1 回答
  • 0 关注
  • 484 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号