位置: 编程技术 - 正文

跟我学习javascript的for循环和for...in循环(java教程 视)

编辑:rootadmin

推荐整理分享跟我学习javascript的for循环和for...in循环(java教程 视),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java script课程,教程java,java教程,java script怎么学,java script,java script,java教程,java learning,内容如对您有帮助,希望把文章链接给更多的朋友!

大家都知道在JavaScript中提供了两种方式迭代对象:

for 循环; for..in循环;

一、for循环

不足:

在于每次循环的时候数组的长度都要去获取;终止条件要明确;在for循环中,你可以循环取得数组或是数组类似对象的值,譬如arguments和HTMLCollection对象。通常的循环形式如下:

这种形式的循环的不足在于每次循环的时候数组的长度都要去获取下。这回降低你的代码性能,尤其当myarray不是数组,而是一个HTMLCollection对象的时候。

HTMLCollections指的是DOM方法返回的对象,例如:

document.getElementsByName()document.getElementsByClassName()document.getElementsByTagName()

还有其他一些HTMLCollections,这些是在DOM标准之前引进并且现在还在使用的。有:

document.images: 页面上所有的图片元素document.links : 所有a标签元素document.forms : 所有表单document.forms[0].elements : 页面上第一个表单中的所有域

集合的麻烦在于它们实时查询基本文档(HTML页面)。这意味着每次你访问任何集合的长度,你要实时查询DOM,而DOM操作一般都是比较昂贵的。

这就是为什么当你循环获取值时,缓存数组(或集合)的长度是比较好的形式,正如下面代码显示的:

这样,在这个循环过程中,你只检索了一次长度值。

在所有浏览器下,循环获取内容时缓存HTMLCollections的长度是更快的,2倍(Safari3)到倍(IE7)之间。//此数据貌似很老

注意到,当你明确想要修改循环中的集合的时候(例如,添加更多的DOM元素),你可能更喜欢长度更新而不是常量。

伴随着单var形式,你可以把变量从循环中提出来,就像下面这样:

这种形式具有一致性的好处,因为你坚持了单一var形式。不足在于当重构代码的时候,复制和粘贴整个循环有点困难。例如,你从一个函数复制了一个循环到另一个函数,你不得不去确定你能够把i和max引入新的函数(如果在这里没有用的话,很有可能你要从原函数中把它们删掉)。

最后一个需要对循环进行调整的是使用下面表达式之一来替换i++。

JSLint提示您这样做,原因是++和?-促进了“过分棘手(excessive trickiness)”。如果你直接无视它,JSLint的plusplus选项会是false(默认是default)。

两种变化的形式:

少了一个变量(无max) 向下数到0,通常更快,因为和0做比较要比和数组长度或是其他不是0的东西作比较更有效率

这些小的改进只体现在性能上,此外JSLint会对使用i?-加以抱怨。

二、for …in 循环—也被称为“枚举”

for …in 循环经常用来迭代对象的属性或数组的每个元素,for…in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引。 下面直接上几个例子:

当遍历一个对象的时候,变量 i 也就是循环计数器 为 对象的属性名 :

跟我学习javascript的for循环和for...in循环(java教程 视)

执行结果为:

name

age

address

当遍历一个数组的时候,变量 i 也就是循环计数器 为 当前数组元素的索引 :

执行结果:

0

1

2

但是,现在看来for .. in循环还挺好用啊,不过,别高兴太早,看看下面的例子:

运行结果:

admin

manager

db

zhangsan 咦,奇观了,怎么平白无故的冒出来一个zhangsan 现在,再看看使用 for循环会怎样?

运行结果:

admin

manager

db 哦, 现在明白了,for..in循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误。为了避免这个问题,我们可以使用对象的hasOwnProperty()方法来避免这个问题,如果对象的属性或方法是非继承的,那么hasOwnProperty() 方法返回true。即这里的检查不涉及从其他对象继承的属性和方法,只会检查在特定对象自身中直接创建的属性。

运行结果:

admin

manager

db 另外一种使用hasOwnProperty()的形式是取消Object.prototype上的方法。像这样:

其好处在于在man对象重新定义hasOwnProperty情况下避免命名冲突。也避免了长属性查找对象的所有方法,你可以使用局部变量“缓存”它。

严格来说,不使用hasOwnProperty()并不是一个错误。根据任务以及你对代码的自信程度,你可以跳过它以提高些许的循环速度。但是当你对当前对象内容(和其原型链)不确定的时候,添加hasOwnProperty()更加保险些。

格式化的变化(通不过JSLint)会直接忽略掉花括号,把if语句放到同一行上。其优点在于循环语句读起来就像一个完整的想法(每个元素都有一个自己的属性”X”,使用”X”干点什么):

标签: java教程 视

本文链接地址:https://www.jiuchutong.com/biancheng/384645.html 转载请保留说明!

上一篇:js实现模拟银行卡账号输入显示效果(java模拟银行存款功能)

下一篇:js操作table元素实现表格行列新增、删除技巧总结(js table)

  • 营业税加收滞纳金的规定
  • 营业税金及附加怎么计提
  • 建筑公司购入的水泥等材料如果是做成本的怎么做分录
  • 企业净利率多少算正常
  • 预收款方式销售货物
  • 财务章备案和不备份区别
  • 一千万人民币可以买多少斤黄金
  • 一个人可以两家以上公司发放工资么
  • 董事长费用可以在公司报销吗
  • 工程预付款需要什么资料
  • 非营利组织需要纳税吗
  • 企业前期开办费没有发票怎么入账
  • 核定征收可以享受小微企业税收优惠吗
  • 应税服务零税率是什么
  • 购入工程物资计入
  • 公司支付倒垃圾费怎么做会计分录
  • 个体户核定征收超过了怎么办
  • 贷款利息收入要减去支付利息支出吗
  • 公司年末补缴企业所得税需要提供什么资料?
  • 房地产营改增后开票
  • 增普票付款要不要从公户走?
  • 进口增值税 海关
  • 开专票需要哪些东西
  • 税务增加办税人员怎么操作
  • 分项结转法怎么结转
  • macbookair网页全屏
  • h5实现扫码功能
  • 电脑机箱前面耳机的WIN10系统没有声音怎么办
  • 代垫费用的进项怎么抵扣
  • PHP:pg_lo_create()的用法_PostgreSQL函数
  • 未分配收益余额在哪方
  • 以公允价值计量的投资性房地产
  • mc office是什么意思
  • 魅族路由器mini刷机
  • 黄石国家公园的建立意义
  • load与initialize
  • 房地产销售老项目增值税
  • 收到退回的以前年度的劳务费怎么入账
  • 微信小程序云开发控制台
  • RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas‘
  • testdisk安装方法
  • 报废车怎么上路
  • 广告合同印花税税目怎么填
  • 应付利息怎么计算
  • 100%控股权什么意思
  • php底部导航代码
  • 公司业务订金怎么退
  • 企业发行债券的交易费用计入
  • 销售提成缴税
  • 申请个体工商户流程
  • 印花税报少了交税了怎么办
  • 进口关税完税价格的计算公式
  • 有限合伙企业属于企业法人还是非法人企业
  • sql server2019实例功能的选择
  • 销售送客户礼物
  • 认缴制的注册资金怎么算
  • 清算所得税计税基础
  • 投资性房地产转换日的确定
  • 建筑业异地预交税款最新规定
  • 建筑企业包工包料业务的发票开具和涉税处理
  • 工会经费可以在以后年度扣除吗
  • 进项税加计扣除10%怎么算
  • 金税盘费用抵扣账务处理
  • 红字信息表开错了对方已开发票怎么处理
  • Win2008 Server Core如何操作?5个步骤学会Win2008 Server Core操作
  • windows任务管理
  • Win10预览版怎么变回正式版
  • 在mac中该如何共享文件夹
  • 组策略禁用u盘怎么打开
  • win7系统可移动的文件
  • [图文教程]Win10家庭版怎么快速升级到win10专业版?
  • glColor3f影响纹理贴图 的思考
  • ie支持es6
  • 圣食颐年
  • Activity的四种启动模式和onNewIntent()
  • 标题显示不出来
  • 利用python做一个文字小游戏
  • threejs入门教程
  • 行政事业单位自办食堂规定
  • 中国税务报客户端
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设