解析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 相关文章推荐
浅析javascript闭包 实例分析
Dec 25 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
javascript实现Email邮件显示与删除功能
Nov 21 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
JavaScript数值类型知识汇总
Nov 17 Javascript
vue+element实现动态加载表单
Dec 13 Vue.js
JavaScript原型链详解
Nov 07 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后门代码解析
2014/07/05 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
Web开发之JavaScript
2012/03/29 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
Javascript缓存API
2016/06/14 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
企业内控岗位的职责
2014/02/07 职场文书
教师求职信范文
2014/05/24 职场文书
评职称个人总结
2015/03/05 职场文书
宇宙与人观后感
2015/06/05 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android