解析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 相关文章推荐
JS面向对象编程之对象使用分析
Aug 19 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
Apr 23 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
谈一谈js中的执行环境及作用域
Mar 30 Javascript
NW.js 简介与使用方法
Feb 01 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
vue中过滤器filter的讲解
Jan 21 Javascript
jquery选择器和属性对象的操作实例分析
Jan 10 jQuery
vue设置全局访问接口API地址操作
Aug 14 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中使用灵巧的体系结构
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
php开发环境配置记录
2011/01/14 PHP
php微信开发之图片回复功能
2018/06/14 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
js图片处理示例代码
2014/05/12 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python for循环中的陷阱详解
2018/07/13 Python
Python多进程写入同一文件的方法
2019/01/14 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
培训演讲稿范文
2014/01/12 职场文书
创业融资计划书
2014/04/25 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
2015年教师节广播稿
2015/08/19 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS