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 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
验证用户是否修改过页面的数据的实现方法
Sep 26 Javascript
基于jQuery的表格操作插件
Apr 22 Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
Node.js实现文件上传的示例
Jun 28 Javascript
小程序实现留言板
Nov 02 Javascript
js实现下拉框二级联动
Dec 04 Javascript
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
Ant-design-vue Table组件customRow属性的使用说明
Oct 28 Javascript
uni-app实现获取验证码倒计时功能
Nov 01 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 ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
jQuery技巧总结
2011/01/01 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
JavaScript入门基础
2015/08/12 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Django 批量插入数据的实现方法
2020/01/12 Python
python动态文本进度条的实例代码
2020/01/22 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
python 下载文件的多种方法汇总
2020/11/17 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
毕业论文致谢范文
2015/05/14 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
资产移交协议书
2016/03/24 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL