关于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 模拟用户单击事件
Dec 31 Javascript
jQuery选择器中含有空格的使用示例及注意事项
Aug 25 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
查看大图功能代码jquery版
Nov 05 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
解析JavaScript的ES6版本中的解构赋值
Jul 28 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 Javascript
简单谈谈vue的过渡动画(推荐)
Oct 11 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 Javascript
微信小程序实现签到弹窗动画
Sep 21 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取整的几种方式
2013/06/25 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
ext jquery 简单比较
2010/04/07 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
python中正则表达式的使用详解
2014/10/17 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
简述Python中的面向对象编程的概念
2015/04/27 Python
Python字符串处理实现单词反转
2017/06/14 Python
pandas数值计算与排序方法
2018/04/12 Python
python画双y轴图像的示例代码
2019/07/07 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
python字典排序的方法
2019/10/12 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
cf搞笑广告词
2014/03/14 职场文书
物流专业自荐信
2014/05/23 职场文书
婚礼父母答谢词
2015/01/04 职场文书
北大自主招生自荐信
2015/03/04 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
Redis实现分布式锁的五种方法详解
2022/06/14 Redis