javascript中for/in循环及使用技巧


Posted in Javascript onSeptember 01, 2015

JavaScript 支持不同类型的循环:

for - 循环代码块一定的次数

for/in - 循环遍历对象的属性

while - 当指定的条件为 true 时循环指定的代码块

do/while - 同样当指定的条件为 true 时循环指定的代码块

1. in运算符:要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数是一个对象或数组。如果该运算符左边的值是右边对象的一个属性名,则返回true。

例如:

var point={x:1,y:2}; //对象直接量
   var has_x="x" in point; //返回true
   var has_z="z" in point; //返回false
   var ts="toString" in point;//返回true,toString为继承方法

   2. for/in语句:语法,

for (variable in object)
                           statement;

      提供了一种遍历对象属性的方法。

例:

for(var prop in my_object) {
    document.write("name:"+prop+";value:"+my_object[prop],"<br>");
  }

      javascript的数组是一种特殊的对象,因此for/in循环可以像枚举对象属性一样枚举数组下标。

可以把一个对象的所有属性名复制到一个数组中,

例:

var o= {x:1,y:2,z:3};
  var a=new Array();
  var i=0;
  for (a[i++] in o) 
  ;//空语句,用于初始化数组

    3. in运算符与for/in语句不同,for/in语句in的左边可以是声明一个变量的var语句,数组的一个元素或者是对象的一个属性,不能使字符串。

    4. 数组常用的存取属性运算符是“[]”,而不是“.”。使用“[]”来命名属性名师字符串值,是动态的,可以在运行时改变,而不是一个标识符“.”。

例:

var stock_name= get_stock_name_from_user();//从用户处获取股票名
  var share= get_number_of_shares();//得到股票数量
  portfolio[stock_name]= share;//动态地创建数组股票,并为每支股票赋值
  将该例子与for/in循环一起使用,当用户输入了他的投资组合,可以计算当前总值
  var value= 0;
  for (stock in portfolio) {
    value +=get_share_value(stock)*portfolio[stock];
  }

stock存取的是每支股票的名字。     

portfolio[stock]存取的是每支股票的数量。

for-in循环

功能:遍历对象属性,把属性名和属性值都提出来

var obj = {
 "key1":"value1",
 "key2":"value2",
 "key3":"value3"
};
function EnumaKey(){
 for(var key in obj ){
  alert(key);
 }
}
function EnumaVal(){
 for(var key in obj ){
  alert(obj[key]);
 }
}
EnumaKey(obj)
//key1 key2 key3
EnumaVal(obj)
//value1 value2 value3

数组也可以这样遍历,但不推荐,因为不能保证顺序,而且如果在Array的原型上添加了属性,这个属性也会被遍历出来。

for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。

从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。

Javascript 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
javascript:void(0)的作用示例介绍
Oct 28 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
Lab.js初次使用笔记
Feb 28 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
Sep 14 Javascript
深入浅析jQuery对象$.html
Aug 22 Javascript
BootStrap select2 动态改变值的方法
Feb 10 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 Javascript
微信小程序点击滚动到指定位置的实现
May 22 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 #Javascript
JavaScript中this详解
Sep 01 #Javascript
JS实现的自定义右键菜单实例二则
Sep 01 #Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 #Javascript
jquery常用函数与方法汇总
Sep 01 #Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
Sep 01 #Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 #Javascript
You might like
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
Python中%r和%s的详解及区别
2017/03/16 Python
python基于递归解决背包问题详解
2019/07/03 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python守护进程实现过程详解
2020/02/10 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
商业房地产广告语
2014/03/13 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
大学生求职计划书
2014/04/30 职场文书
安全教育月活动总结
2014/05/05 职场文书
写给医院的感谢信
2015/01/22 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL