js中小括号()作用趣谈

写这篇分享,源于一个学弟的提问,console.log(15.toString())报错,而console.log((15).toString()) //=>’15’,想明原因,逐与君分享一下。
‘15.toString()’报错是因为‘.’运算符被当成常量‘15.’的一部分了,也就是当成小数点了,所以没有‘.’属性访问运算符来调用toString()了,故而报错。加上‘()’,因为‘()’优先级最高,js会在后台先创建一个包装对象(对此有疑问的,可移步查看js自动创建包装对象),然后通过‘.’属性访问运算符来调用toString()。(原来如此,心中一群**马呼啸而过)
额外赘述:‘()’有两种作用,一是用来控制表达式中的运算等级即分组运算符;二是函数调用。
作为分组运算符来用的话,‘()’里边只能是(可转化成)表达式形式,否则报错,例如’(var a = 1)’//报错
在这提一下之前热议过的问题:
function fn(){}()会报错,而(function fn(){})()则能顺利执行的原因。
前者function开头,是函数声明语句,此处的‘()’是分组运算符,里边不是表达式格式,报错。
后者是函数表达式形式,此处的‘()’是函数调用,不报错。
同理,‘{a}={a:10}’变成‘({a}={a:10})’就不报错了,也类似这个原因。
没加’()‘之前,相当于给代码块赋值,报错;加上’()'后,此处的‘()’是分组运算符,里边内容是表达式形式,正确。
曾看到有师兄分享的说是小括号的作用就是执行单个或多个表达式,其实不然,小括号对于括起来的数据作用仅是用来控制表达式中的运算等级,并没有执行的功能。

发布了5 篇原创文章 · 获赞 9 · 访问量 170

猜你喜欢

转载自blog.csdn.net/zhongguogangkou/article/details/105510198