首页 web前端 js教程 javascript中for循环使用时的注意事项

javascript中for循环使用时的注意事项

Aug 22, 2017 am 11:11 AM
javascript js 注意事项


如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。

很多时候我们都用到for循环,而用到for循环部门往往对一个数组进行循环,其中我们很多时候都是这样写的:

// 次佳的循环
for (var i = 0; i < myarray.length; i++) {
 // 使用myarray[i]做点什么}
登录后复制

  这样的代码虽然没有什么大问题,但是每次循环都会获取一下数组的长度,这回降低你的代码,尤其当myarray不是数组,而是一个HTMLCollection对象的时候。

再看看下面的这个代码:

for (var i = 0, max = myarray.length; i < max; i++) {
 // 使用myarray[i]做点什么}
登录后复制

这样地代码只会获取一次数组的长度,提高了代码的质量;

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

function looper() {
 var i = 0,
  max,
  myarray = [];
 // ...
 for (i = 0, max = myarray.length; i < max; i++) {
  // 使用myarray[i]做点什么
 }}
登录后复制

javascript使用for循环时问题总结

这个问题的讨论最初来自公司内部邮件,我只是把这个问题的讨论内容记录下来。

有一些项目组在定位问题的时候发现,在使用“for(x in array)”这样的写法的时候,在IE浏览器下,x出现了非预期的值。

具体说,如果自定义了Array.prototype.indexOf方法(譬如源于某prototype污染),也许是因为老版本IE浏览器并不支持array.indexOf方法,而开发者又很想用,那么这样的浏览器可能会出现这样的问题:

Array.prototype.indexOf = function(){...};
var arr = [1, 2];for (x in arr) console.log(x);
登录后复制

//会输出

1
2function(){…}
登录后复制

换句话说,把indexOf这个方法给输出出来了。

解决方法很简单,要么别添加这个方法,要么用“for (i=0; i < array.length; i++)”这样的循环等等。

但是问题的本质呢?有人猜测,可能是因为for(x in obj)这种用法其实是去遍历一个对象,而array的实现其实也和普通的object一致,只不过key是既定的数值而已:

{0:"something", 1:"something else"}
登录后复制

在一则stackoverflow的问答里面也提到了,遍历数组的时候用for…in和for(;;)的区别,前者的含义是枚举对象的属性,存在这样两个问题:

枚举的顺序无法被保证;

继承属性也被枚举出来;

在对Array.prototype.forEach的支持上,从这张表中也可以明确看到,IE8及以下版本是无法准确支持的:

这里还有对forEach方法兼容性的详细阐述。事实上,主要的JavaScript框架(比如jQuery、Underscore和Prototype等等)都有安全和通用的for-each功能实现。

在JSLint的for in章节里面也提到,for in语句允许循环遍历对象的属性名,但是也会遍历到那些通过原型链继承下来的属性,这在很多情况下都会造成预期以外的错误。有一种粗暴的解决办法:

for (name in object)
 { if (object.hasOwnProperty(name))
 { .... } }
登录后复制

还有人提到了使用for(var i=0;i类似这样的循环时的问题,因为JavaScript没有代码块级别的变量,所以这里的i的访问权限其实是所在的方法。有的书上会建议程序员把这样的变量声明放到一处去,但是从直观性上说,在大部分情况下都不够合理。

使用JavaScript 1.7中引入的“let”可以解决这个问题,使i成为真正的代码块级别的变量:

for(let i =0; i < a.length; i++)
登录后复制

最后,在Google的JavaScript风格导引里面,也涉及到了这个约束:

for-in loop:
Only for iterating over keys in an object/map/hash
登录后复制

以上就是本文关于javascript 使用for循环时该注意的问题-附问题总结的全部内容,希望对今后的工作学习有所帮助,同时欢迎各位业内人士提出批评建议。

以上是javascript中for循环使用时的注意事项的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1264
29
C# 教程
1237
24
推荐:优秀JS开源人脸检测识别项目 推荐:优秀JS开源人脸检测识别项目 Apr 03, 2024 am 11:55 AM

人脸检测识别技术已经是一个比较成熟且应用广泛的技术。而目前最为广泛的互联网应用语言非JS莫属,在Web前端实现人脸检测识别相比后端的人脸识别有优势也有弱势。优势包括减少网络交互、实时识别,大大缩短了用户等待时间,提高了用户体验;弱势是:受到模型大小限制,其中准确率也有限。如何在web端使用js实现人脸检测呢?为了实现Web端人脸识别,需要熟悉相关的编程语言和技术,如JavaScript、HTML、CSS、WebRTC等。同时还需要掌握相关的计算机视觉和人工智能技术。值得注意的是,由于Web端的计

鸣潮测试期间注意事项介绍 鸣潮测试期间注意事项介绍 Mar 13, 2024 pm 08:13 PM

在鸣潮测试期间,请避免进行系统升级、恢复出厂设置和换件等操作,以防信息丢失导致游戏登录异常。特别提醒,测试期暂无申诉通道,请您务必小心处理。鸣潮测试期间注意事项介绍答:不要升级系统、还原出厂设置、更换设备组件等。注意事项介绍:1、请在测试期内谨慎升级系统避免信息丢失。2、若进行系统更新,可能产生无法登陆游戏的问题。3、在此阶段,申诉通道暂未开启,敬请玩家酌情选择是否进行升级。4、同时,一个游戏账号仅能与一部安卓设备及一台PC搭配使用。5、建议您等待测试结束后再行升级手机系统或还原出厂设置、更换设

在没有网络的情况下安装pip的步骤和注意事项 在没有网络的情况下安装pip的步骤和注意事项 Jan 18, 2024 am 10:02 AM

离线环境下安装pip的方法及注意事项在网络不通畅的离线环境中,安装pip成为一项挑战。在本文中,将介绍几种离线环境下安装pip的方法,并提供具体的代码示例。方法一:使用离线安装包在可以连接网络的环境中,使用以下命令从官方源下载pip安装包:pipdownloadpip此命令将会自动从官方源下载pip及其依赖的包,并保存在当前目录下。将下载的压缩包移动到离

第一次抖音开直播怎么弄?第一次直播需要注意什么? 第一次抖音开直播怎么弄?第一次直播需要注意什么? Mar 22, 2024 pm 04:10 PM

随着短视频平台的兴起,抖音已成为许多人日常生活中不可或缺的一部分。而在抖音上开直播,与粉丝互动,更是许多用户梦寐以求的事情。那么,第一次抖音开直播怎么弄呢?一、第一次抖音开直播怎么弄?1.准备工作要开始直播,首先需要确保您的抖音账号已经完成实名认证。您可以在抖音APP中的“我”->“设置”->“账号与安全”中找到实名认证教程。完成实名认证后,您就可以满足直播条件,开始在抖音平台进行直播了。2.申请直播权限在满足直播条件后,您需要申请直播权限。打开抖音APP,点击“我”->“创作者中心”->“直

利用localstorage存储数据的步骤和注意事项 利用localstorage存储数据的步骤和注意事项 Jan 11, 2024 pm 04:51 PM

利用localStorage存储数据的步骤和注意事项本文主要介绍如何使用localStorage来存储数据,并提供相关的代码示例。LocalStorage是一种在浏览器中存储数据的方式,它可以将数据保存在用户的本地计算机上,而不需要通过服务器。下面是使用localStorage存储数据的步骤和需要注意的事项。步骤一:检测浏览器是否支持LocalStorage

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

js和vue的关系 js和vue的关系 Mar 11, 2024 pm 05:21 PM

js和vue的关系:1、JS作为Web开发基石;2、Vue.js作为前端框架的崛起;3、JS与Vue的互补关系;4、JS与Vue的实践应用。

如何在JavaScript中获取HTTP状态码的简单方法 如何在JavaScript中获取HTTP状态码的简单方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP状态码获取方法简介:在进行前端开发中,我们常常需要处理与后端接口的交互,而HTTP状态码就是其中非常重要的一部分。了解和获取HTTP状态码有助于我们更好地处理接口返回的数据。本文将介绍使用JavaScript获取HTTP状态码的方法,并提供具体代码示例。一、什么是HTTP状态码HTTP状态码是指当浏览器向服务器发起请求时,服务

See all articles