关于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 相关文章推荐
常用参考资料(手册)下载或者链接
Jul 22 Javascript
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
IE6 fixed的完美解决方案
Mar 31 Javascript
JQuery datepicker 使用方法
May 20 Javascript
JS 实现获取打开一个界面中输入的值
Mar 19 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
浅谈vue项目重构技术要点和总结
Jan 23 Javascript
JavaScript生成指定范围的时间列表
Mar 19 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
在vue中获取wangeditor的html和text的操作
Oct 23 Javascript
代码解析React中setState同步和异步问题
Jun 03 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通过分类列表产生分类树数组的方法
2015/04/20 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
js数组操作学习总结
2013/11/04 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
编程语言Python的发展史
2014/09/26 Python
给Python初学者的一些编程技巧
2015/04/03 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
创联软件面试题笔试题
2012/10/07 面试题
总经理秘书岗位职责
2014/03/17 职场文书
父母对孩子的寄语
2014/04/09 职场文书
党支部四风整改方案
2014/10/25 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
浅谈Redis缓冲区机制
2022/06/05 Redis