解析Javascript小括号“()”的多义性


Posted in Javascript onDecember 03, 2013

Javascript中小括号有五种语义

语义1,函数声明时参数表

function func(arg1,arg2){ 
  // ... 
}

语义2,和一些语句联合使用以达到某些限定作用
// 和for in一起使用 
for(var a in obj){ 
  // ... 
} // 和if一起使用 
if(boo){ 
  //... 
} 
// 和while一起使用 
while(boo){ 
  // ... 
} 
// 和do while一起使用 
do{ 
  // ... 
}while(boo)

注意:在与if、while及do while一起使用时小括号会将其中的表达式结果隐式的转换成布尔值。见 JavaScript中的隐式类型转换 。

语义3,和new一起使用用来传值(实参)

// 假设已经定义了类Person,它有两个字段姓名(name),年龄(age) 
var p1 = new Person('Jack',26);

语义4,作为函数或对象方法的调用运算符(如果定义了参数也可与语义3一样传实参)
// 假设已经定义了函数func 
func(); // 假设已经定义了对象obj,且拥有func方法 
obj.func();

这里提下typeof运算符,有人喜欢这么使用

typeof(xxx);

请注意typeof后的小括号并非语义4(即不是函数调用),而是后面提到的语义5。我使用typeof一般不加后面的小括号。

语义5,强制表达式运算

关于语义5,大家最熟悉的莫过于使用eval解析JSON

function strToJson(str){ 
     // eval 中字符串两旁加了强制运算符() 
     var json = eval('(' + str + ')');  
     return json; 
}

又如使用较多的是匿名函数自执行
(function(){ 
  // ... 
})();
Javascript 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
javascript生成随机数方法汇总
Nov 12 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
May 07 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
vue-model实现简易计算器
Aug 17 Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 #Javascript
jquery将一个表单序列化为一个对象的方法
Dec 02 #Javascript
jQuery获得内容和属性方法及示例
Dec 02 #Javascript
jquery如何实现锚点链接之间的平滑滚动
Dec 02 #Javascript
jquery通过a标签删除table中的一行的代码
Dec 02 #Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 #Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 #Javascript
You might like
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
javascript之Partial Application学习
2013/01/10 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
[01:09:24]Ti4开幕式
2014/07/19 DOTA
简单学习Python多进程Multiprocessing
2017/08/29 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Python新手学习标准库模块命名
2020/05/29 Python
Python requests上传文件实现步骤
2020/09/15 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
史上最全面的Java面试题汇总!
2015/02/03 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
2014年社区庆元旦活动方案
2014/03/08 职场文书
聚美优品的广告词
2014/03/14 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
优秀教师申报材料
2014/12/16 职场文书
工作检讨书大全
2015/01/26 职场文书
社区活动总结
2015/02/04 职场文书
特种设备安全管理制度
2015/08/06 职场文书
思品教学工作总结
2015/08/10 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
Kubernetes控制节点的部署
2022/04/01 Servers