金色小芝麻

vuePress-theme-reco 金色小芝麻    2021 - 2023
金色小芝麻 金色小芝麻

Choose mode

  • dark
  • auto
  • light
主页
分类
  • JavaScript
  • BUG复盘
  • SVG笔记
  • TypeScript
  • 个人总结
  • CSS笔记
  • 开发工具
  • 前端入门
  • Vue2.0
  • 性能优化
  • 架构学习
  • 每日一题
标签
时间轴
社交
  • 掘金 (opens new window)
author-avatar

金色小芝麻

83

文章

27

标签

主页
分类
  • JavaScript
  • BUG复盘
  • SVG笔记
  • TypeScript
  • 个人总结
  • CSS笔记
  • 开发工具
  • 前端入门
  • Vue2.0
  • 性能优化
  • 架构学习
  • 每日一题
标签
时间轴
社交
  • 掘金 (opens new window)
  • 前端入门

    • 博客搭建过程及相关配置
    • 数组中的16种常用方法
    • JS中的数据类型简析——基本数据类型值
    • JS中的数据类型object基础
    • JS中三种常见的判断
    • 数据类型之间的区别(堆内存Heap VS 栈内存Stack)
    • JS基础练习题及解析
    • 开关灯的小案例
    • JS中数据类型检测方法——typeof
    • 条件判断几个小练习
    • JS循环——for循环
    • 自定义属性实现选项卡小案例
    • 字符串中的12种常用方法
    • DOM操作的简单原理
    • JS实现隔行变色鼠标跟随小案例
    • JS中function的基础知识
    • JS中数组去重的三种方法
    • JS中时间格式化的三种方法
    • JS中URL参数处理的三种方法
    • JS小案例——获取随机验证码
    • DOM操作之——获取DOM标签的9种方式
    • DOM操作之——DOM节点类型及属性
    • DOM操作之——元素的增删改、样式修改、插入内容
    • JS中THIS相关问题梳理
    • JS中的变量提升机制
    • 在全局:私有上下文中:带VAR和不带VAR的区别
    • 作用域和作用域链查找机制
    • JS中堆栈内存的释放问题
    • JS中的闭包机制
    • ES3和ES6定义变量的区别
    • JS中的单例和工厂设计模式
    • JS中的面向对象OOP理论基础
    • 构造函数创建自定义类
    • JS中的原型和原型链
    • Math中常用的9种方法
    • 从一道阿里经典面试题剖析函数三种角色
    • 重写内置call
    • 重写一个内置new
    • 浏览器渲染页面的主体流程
    • 减少DOM的回流和重绘
    • JS中的多种继承方式
    • JS中数据类型检测四种方式的优缺点
    • JS中的正则表达式&&全面梳理
    • 非严格模式 🆚 严格模式的区别
    • 数组方法reduce、filter、flat
    • 获取数组中最大值/最小值的三种基础方法
    • 轮播图——渐隐渐显版
    • 深克隆 VS 浅克隆|深比较 VS 浅比较|回调函数
    • 轮播图——左右切换版
    • 事件及事件绑定、事件对象及事件传播
    • 从在地址栏输入网址到看到页面的过程&&AJAX基础
    • 想自学JS吗?想提升JS底层原理吗?76张脑图带你彻底搞懂原生JS
    • 面试手写API系列
    • 30张脑图带你从零开始学VUE
    • JS中的盒子模型
    • 初识JS-基础中的基础
    • 前端发展简史
    • JS中的三大类输出方式

JS循环——for循环

vuePress-theme-reco 金色小芝麻    2021 - 2023

JS循环——for循环

金色小芝麻 2020-03-28

JS中的循环有很多,今天我们简单说一下for循环及它和for in循环的区别;

# 一、for循环

# 1、作用

  • 一轮一轮的重复做某一件事情

# 2、项目中的使用情况

  • 循环一个集合或者控制循环处理的次数,每一轮循环都控制相关的事情执行一遍

# 3、语法

for(设置初始值;设置循环执行的条件,控制循环次数;每一轮循环结束后处理的事情[步长累加]){
	//=>循环体(每一轮循环要做的事情)		 
}

# 4、操作步骤

  • 1、设置初始值
  • 2、验证条件(条件不成立循环结束)
  • 3、循环体
  • 4、步长累加
  • 5、再次验证条件
  • 6、循环体
  • ...

# 5、例题详解

-1).

for (var i = 0; i < 5; i++) {
	console.log(`本轮循环i的值是:${i}`);
}
console.log(`循环结束后,此时的i已经变为:${i}`);

/*
 * 初始值:i=0 
 *    0<5 成立的
 *      0<3成立  i++  i=1  =>1
 *      i+=2  i=3
 *    3<5 成立的
 *      3<3 不成立  =>3
 *      i+=2  i=5
 *    5<5 不成立 循环结束
 */

-2).

for (var i = 0; i < 5; i += 2) {
	if (i < 3) {
		i++;
	}
	console.log(`本轮循环i的值是:${i}`);//=> 1 , 3
}
console.log(`循环结束后,此时的i已经变为:${i}`);//=> 5

-3). 此题需要注意的是,

  • 循环体中可以不定义初始值,但必须用分号隔开(占位),
  • 且循环体中变量在全局作用域下可查询,
  • 步长累加也可省略,同样必须用分号占位
var n = 10;
for (; n > 0;) {
	if (n > 5) {
		n -= 2;
	} else {
		n -= 3;
	}
}
console.log(`循环结束后,此时的i已经变为:${n}`);  //=>-2

# 二、循环中可能出现的两个关键字break和continue

# 1、break

  • 强制结束整个循环
  • 循环体中一旦遇到break ,整个循环都结束了,break 下面代码不在执行,步长累计也不在执行
for (var i = 0; i < 5; i++) {
	if (i > 3) {
		// i=4 的时候,遇到了break,此时循环结束
		break;
	}
	console.log(`本轮循环i的值是:${i}`); //=> 0 1 2 3 
}
console.log(`循环结束后,此时的i已经变为:${i}`); //=>4

# 2、continue

  • 结束本轮循环,下一轮继续
  • 循环体中一旦遇到continue ,本轮循环结束,continue 下面代码不在执行,但是步长累计会执行
for (var i = 0; i < 5; i++) {
	if (i > 2) {
		i += 1;
		//=>i=3 i++ =>i=4 遇到continue:本轮循环结束(下面输出不执行,但是i++会执行)
		continue; 
	}
	console.log(`本轮循环i的值是:${i}`); //=>0 1 2 
}
console.log(`循环结束后,此时的i已经变为:${i}`); //=>5

for (var i = 0; i < 10; i++) {
	if (i >= 2) {
		i += 2;
		continue;
	}
	if (i >= 6) {
		i--;
		break;
	}
	i++;
	console.log(i); //=>1
}
console.log(i); //=>11

# 三、for 循环与for in循环的区别及应用

# 1、for 循环应用

  • 遍历(循环 / 迭代)数组中的每一项:因为数组有索引和length属性,所以我们能够知道循环次数,也能基于索引获取对应项,使用FOR循环就可以解决
var arr = [10, 20, 30, 40, 50];
for (var i = 0; i < arr.length; i++) {
	// arr.length = 5
	// 第一轮循环 i=0
	arr[0]
	// 第二轮循环 i=1
	arr[1]
	// ....
	// 第五轮循环 i=4
	arr[4]
	每一轮循环i变量存储的值就是我们当前这一轮想获取数组中当前项的索引

	console.log(arr[i]);
}

# 2、for in 循环

  • 遍历对象中的每一个属性:我们无法直接获取到对象中有多少个属性(ES6中的Object.keys除外),也就无法知道循环多少次,所以无法使用FOR循环;真实项目中遍历对象我们基于FOR IN循环;

  • 语法:

    • for(var key in obj){...}
      • 创建变量(存储的是属性) in 对象
      • 当前对象中有多少个可枚举的属性,就能循环多少次
      • key变量存储的是每一次循环的属性名
        • obj[key]获取key变量对象属性名的属性值
    var obj = {
    	name: '小明',
    	age: 18,
    	address: '北京市'
    };
    for (var key in obj) {
    	console.log(`本轮循环,属性名:${key},属性值:${obj[key]}`);
    }
    

  • 注意:

    • FOR IN遍历的时候,是优先按照从小到大的机制遍历数字属性的
    var obj = {
    	name: '小明',
    	age: 10,
    	10: 100,
    	0: 10
    };
    for (var key in obj) {
    	// 0 10 name age
    	console.log(`本轮循环,属性名:${key},属性值:${obj[key]}`);
    }
    

# 思维导图

欢迎来到 金色小芝麻
看板娘