关于JavaScript对象的动态选择及遍历对象


Posted in Javascript onMarch 10, 2014

(一)动态选择方法及属性

在实际工作中,我们经常会遇到这种情况:根据某个条件来调用两个方法[1]中的一个,或是在两个属性[2]中的一个上面进行读写操作。下面的代码展示了这种情形:

if (condition) { 
myObj.method1(someArg); 
} else { 
myObj.method2(someArg); 
}

JavaScript提供了一种简单的语法,即使用方括号操作符([])来动态地选择方法和属性。正如下面的代码所示,JavaScript有两种等价的成员访问语法(这个特征在动态语言里很常见):
obj[expressionResultingInMembername] == obj.memberName

如果你曾用整数下标来访问数组中的某个元素,那你已经开始用方括号操作符来进行动态成员选择了。这是因为,数组对象本身就包含以数字下标命名的属性(以及length属性)。不过,JavaScript并不允许你使用点操作符(.)直接访问这些属性,因此myArray.0在语法上是非法的(太遗憾了,这本来是个挺酷的语法)。
为什么方括号操作符比点操作符表示法更强大呢?这是因为你可以在方括号中使用任何代表成员名称的内容来访问对象的成员。这些内容包括字面量、保存着成员名称的变量、名称组合(多数情况下是字符串的拼接)以及用三元操作符(condition ? valueIfTrue : valueIfFalse)实现的快速if/then选择。所有的这些内容都会被处理成一个字符串,然后JavaScript会用这个字符串来寻找对应的成员。
由于JavaScript中的函数本身也是对象,所以它可以像其他值一样被引用。如果一个表达式的结果是函数,你可以直接用括号操作符调用它,就像你直接用函数名称调用函数一样。
需要注意的是,如果你在向方法传递的参数上大量使用此类技巧,混乱的括号有可能会使代码变得难以阅读,此时使用常规的if/else结构更加明智。

(二)JavaScript遍历对象属性和方法

JavaScript 使用 for in 语句来遍历对象的属性和方法。for in 语句循环遍历 JavaScript 对象,每循环一次,都会取得对象的一个属性或方法。

语法:

for(valueName in ObjectName){ 
// 代码 
}

其中,valueName 是变量名,保存着属性或方法的名称,每次循环,valueName 的值都会改变。
Javascript 相关文章推荐
javascript xml为数据源的下拉框控件
Jul 07 Javascript
JQUERY1.6 使用方法四 检测浏览器
Nov 23 Javascript
js取消单选按钮选中并判断对象是否为空
Nov 14 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
May 30 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
Mar 06 Javascript
vue-week-picker实现支持按周切换的日历
Jun 26 Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 Javascript
使用js操作css实现js改变背景图片示例
Mar 10 #Javascript
红米手机抢购的js代码
Mar 10 #Javascript
按下回车键指向下一个位置的一个函数代码
Mar 10 #Javascript
用js判断输入是否为中文的函数
Mar 10 #Javascript
用IE重起计算机或者关机的示例代码
Mar 10 #Javascript
屏蔽相应键盘按钮操作
Mar 10 #Javascript
JavaScript对IE操作的经典代码(推荐)
Mar 10 #Javascript
You might like
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
DOM 事件流详解
2015/01/20 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
浅析Python基础-流程控制
2016/03/18 Python
机器学习python实战之手写数字识别
2017/11/01 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
OpenCV 模板匹配
2019/07/10 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
python实现网页录音效果
2020/10/26 Python
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
质量标语大全
2014/06/12 职场文书
社区助残日活动总结
2014/08/29 职场文书
硕士学位论文评语
2014/12/31 职场文书
社区法制宣传日活动总结
2015/05/05 职场文书
离婚律师函范本
2015/05/27 职场文书
李强感恩观后感
2015/06/17 职场文书
寒假致家长的一封信
2015/10/10 职场文书
银行工作心得体会范文
2016/01/23 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
解决 redis 无法远程连接
2022/05/15 Redis