Javascript中for循环语句的几种写法总结对比
发布时间 - 2026-01-10 22:44:59 点击率:次前言

for循环我们在js遍历对象或数组时都会有用到了,今天我们一起来看一些关于for循环的一些使用例子了,具体的操作细节如下文介绍。
一般写法如下:
for(var i = 0;i< arr.length;i++) {
var a = arr[i];
//...
}
这就是一个常见的,正序循环的for循环。这样写的缺点大家都明白:每次都从arr里取length与i来对比,浪费性能(而且,要是arr的长度是动态变化的,就会出现死循环)。改进这个循环的办法是用变量保存arr.length:
for(var i = 0, al = arr.length;i< al;i++) {
var a = arr[i];
//...
}
这样比第一种可以略微提升点性能,要是数组长,可以提升更多。
不过这样写就多了个变量al,且这个变量只在用来与i对比的时候有用,看着有点鸡肋。
如果循环顺序对你不重要,那你可以尝试倒序循环:
for(var i = arr.length-1;i > -1;i--) {
var a = arr[i];
//...
}
这样一来变量少些,且还缓存过arr长度,性能也不错。但这里的代码写得有点拙劣(我故意的),首先是i = arr.length-1(居然要-1,靠),然后是循环继续执行的条件i > -1,都让有洁癖的人无法忍受。
下面是我常用的倒序for循环写法:
for(var i = arr.length;i--;) {
var a = arr[i];
//...
}
这已经非常精简了。原理需要理解一下:for循环继续执行的条件,是;;之间的这个判断要为真,而这里的i–,在第一次循环进来的时候,i=arr.length,i–值不变(为什么不变?因为要在for循环体里面,才会发现i变了);当i=1时,i- -还是1,但进入循环体后,就是0了,所以可以正常执行最后一次循环;当i=0时,i–还是0,而0已经不为真了,所以循环就不会继续执行了。
大家注意到上面的所有代码的for循环体里,都有个var a = arr[i] ,用来取出当前循环到的数组项。这实际上也是种浪费,且jsLint等会告诉你:不要在循环里声明变量。。。
倒序的for可以精简至斯,但我就是要正序,而且要效率高,变量少,怎么办?
如下:
for(var i = 0, a;a = arr[i++];) {
//...
}
这种写法好处在于:几乎不可避免的arr.length不见了,前面说的取出当前循环到的数组项的那一句也不见了。
原理:
a = arr[i++] ,在这里作为循环能执行的条件,注意这里只有一个=号,所以这不是判断句,是赋值语句,就是把arr[i++]赋给a,然后判断a是不是真值。i++与i–的原理类型我就不说了,只说当i++已经超过数组的长度时,循环肯定要停止才行,而这里真的就停止了,为什么?因为a=arr[i++] ,如果取到了超出数组本身长度的项,只会取得一个undefined,而undefined是假值,循环条件就判断失败了。
当然,这样写的缺点也很明显:
1,当arr的长度动态变化时,依然会产生死循环————因为我们从来没缓存过arr.length呀。
2,如果循环的是一个数字数组,当取出的项(即a的值)为0时,就会中止循环(因为0是假值)。
3,当数组中某一项是假值时(包括空字符串,0,null,undefined),同样会中止循环
所以大家用这种写法时,最好排除掉上面的情况再用。
这个原理同样可以用在倒序循环上。
最后我要忠告大家几句:
- 代码精简不等于效率高!
- 不要为了故意精简代码而丧失性能
顺带说几点提高for循环性能的要点:
1,适时break!不需要遍历全部的就要加跳出条件!
2,不要在for循环体里声明变量(建议一次var,多次赋值)
2,数组长度缓存,尽量少变量
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流。
# js
# for循环的几种写法
# js中for循环语句写法
# for循环快捷写法
# javascript 循环语句 while、do-while、for-in、for用法区别
# js使用for循环及if语句判断多个一样的name
# javascript中的循环语句for语句深入理解
# 用循环或if语句从json中取数据示例
# JavaScript中对循环语句的优化技巧深入探讨
# JavaScript for循环 if判断语句(学习笔记)
# 简单学习JavaScript中的for语句循环结构
# 详解JavaScript中循环控制语句的用法
# 详细谈谈JavaScript中循环之间的差异
# 就会
# 遍历
# 的人
# 是一个
# 看着
# 我就
# 我要
# 也不
# 在这里
# 有个
# 大家都
# 一句
# 不需要
# 如有
# 才会
# 告诉你
# 不要在
# 对你
# 但我
# 从来没
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
如何用y主机助手快速搭建网站?
如何快速启动建站代理加盟业务?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
JavaScript模板引擎Template.js使用详解
微信小程序 闭包写法详细介绍
Android使用GridView实现日历的简单功能
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何在局域网内绑定自建网站域名?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
详解Huffman编码算法之Java实现
制作旅游网站html,怎样注册旅游网站?
Laravel如何自定义分页视图?(Pagination示例)
,交易猫的商品怎么发布到网站上去?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel PHP版本要求一览_Laravel各版本环境要求对照
php打包exe后无法访问网络共享_共享权限设置方法【教程】
网站制作企业,网站的banner和导航栏是指什么?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
在线制作视频网站免费,都有哪些好的动漫网站?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
如何在阿里云ECS服务器部署织梦CMS网站?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Java遍历集合的三种方式
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
深圳网站制作平台,深圳市做网站好的公司有哪些?
详解MySQL数据库的安装与密码配置
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
如何获取PHP WAP自助建站系统源码?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
C语言设计一个闪闪的圣诞树
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何用免费手机建站系统零基础打造专业网站?
IOS倒计时设置UIButton标题title的抖动问题
如何用AWS免费套餐快速搭建高效网站?
JavaScript如何实现倒计时_时间函数如何精确控制
如何基于PHP生成高效IDC网络公司建站源码?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何自定义建站之星网站的导航菜单样式?
如何在服务器上三步完成建站并提升流量?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏

