Js中几种循环的使用
在JavaScript中有五种常用的循环,现在来分别介绍一下五种循环的用法。
1.while
当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:while(表达式){循环体}。
let num = 0;
while (num < 5) {
num++;
console.log(num);
}
// 1
// 2
// 3
// 4
// 5
while (num > 5) {
num++;
console.log(num);
}
// 5
// 4
// 3
// 2
// 1
2.do...while
do {循环体} while(表达式)
用法和while相差不大,但有特殊的一点是当while后条件表达式为false时,do内的循环体仍然会执行一次
let num = 0;
do {
num++;
console.log(num);
} while (num < 5)
// 1
// 2
// 3
// 4
// 5
do {
num++;
console.log(num);
} while (num > 5)
// 1
3.for
for循环是平时用法最多的循环,for循环的循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。因为for循环的单次表达式,条件表达式,末尾循环体可以使用不同的形式,所以for循环很灵活,有多种变式。
shilet num = 0;
// 最基本的用法
for (let i = 5; i > num; i--) {
console.log(i);
}
// 当单次表达式写在判断条件外部时
let i=5;
for(;i>num;i--){
console.log(i)
}
// 当单次表达式和条件表达式写在判断条件外部时
for(;;i--){
if(i>0){
console.log(i);
}else{
break
}
}
for(;true;){
if(i>0){
console.log(i);
}else{
break
}
i--;
}
// 当作while循环使用
// 死循环 一直打印 for
for(;true;){
onsole.log('for');
}
for...of...
for...of...通常用来遍历传入对象的属性值,前提传入的对象是一个可迭代对象,不可迭代对象需要转为可迭代对象再遍历.
let arr = [1, 'a', '2', 3, 'b'];
let obj = {
name: 'aa',
age: 11
}
for (const value of arr) {
console.log(value);
}
// 1
// a
// '2'
// 3
// b
for (const value of obj) {
console.log(value);
}
// TypeError: obj is not iterable 提示obj不是可迭代对象
使用for...of...可以消耗迭代器
// o为生成斐波那契数列的一个迭代器对象
let o = {
n1: 1,
n2: 1,
[Symbol.iterator]() {
return this
},
next() {
let current = this.n2;
this.n2 = this.n1;
this.n1 = this.n1 + current;
if(current>10) return {value: current,done: true}
return {value: current,done: false}
}
}
for (const v of o) {
console.log(v);
}
// 1
// 1
// 2
// 3
// 5
// 8
for...in...
for...in...通常来遍历传入对象的属性名,该循环没有对对象是否可迭代的要求
let arr = [1, 'a', '2', 3, 'b'];
let obj = {
name: 'aa',
age: 11
}
for (const key in arr) {
console.log(key);
}
// 0
// 1
// 2
// 3
// 4
for (const key in obj) {
console.log(key);
}
// name
// age
Js中几种循环的使用的更多相关文章
- JS中几种常见的数组算法(前端面试必看)
JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- 关于js中两种定时器的设置及清除(转载)
1.JS中的定时器有两种: window.setTimeout([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法 ...
- [js]js中4种无节操的预解释情况
js中4种无节操的预解释情况 - 1. if语句即使条件不成立,条件里的表达式也会进行预解释. - 2. 匿名函数的预解释: 只对等号左边与解释 - 3. 自执行函数的预解释: 不进行预就解释, 执行 ...
- [js]js中6种错误处理机制
js中6种错误 http://javascript.ruanyifeng.com/grammar/error.html#toc5 https://www.jianshu.com/p/467b9a145 ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- js事件、Js中的for循环和事件的关系、this
一.js事件 1.事件 用户在网页中所触发的行为 鼠标滑动种类很多,键盘.表单特列: 点击:onclick 鼠标进入:onmouseenter 鼠标离开:onmouseleave 鼠标悬浮:onmo ...
- php中的for循环和js中的for循环
php中的for循环 循环100个0 for ($i=0;$i<=100;$i++){ $pnums.='0'.","; } js中的for循环,循环31个相同的数.循环日期 ...
- JS中5种经典继承方式
继承 JS中继承的概念: 通过[某种方式]让一个对象可以访问到另一个对象中的属性和方法,我们把这种方式称之为继承 并不是所谓的xxx extends yyy 为什么要使用继承? 有些对象会有方法(动作 ...
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
[摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...
随机推荐
- 12年经验的大龄程序员,都用什么写 API 文档?
写代码,程序员不害怕. 写文档,每个程序员都害怕! 为什么? 技术优先,我们更倾向于将技能和精力更多地放在编写代码上,如果 API 工具不好使,不便捷,同步麻烦,测试看不懂,更会大大地打击编写文档的积 ...
- Spring Boot 整合 xxl-job
官方文档:https://www.xuxueli.com/xxl-job/ XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线 ...
- Java SpringBoot 中,动态执行 bean 对象中的方法
根据不同的条件,调用不同的 bean 对象,执行对象中的方法 SpringUtils 工具类 package com.vipsoft.web.utils; import cn.hutool.core. ...
- LeetCode 周赛 341 场,模拟 / 树上差分 / Tarjan 离线 LCA / DFS
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末有单双周赛,双周赛我们讲过了,单周赛那天早上有事没参加,后面做了虚拟竞赛,然后整个 ...
- Linux grep命令详细教程
[本文出自天外归云的博客园] 简介 Linux grep命令是一种非常常用的文本搜索工具,它可以在给定的文件中搜索匹配的字符串,并输出匹配的行.grep是全称"global search r ...
- ATL创建的ActiveX实现JS回调
最近公司的产品需要使用ActiveX文件上传.讨论了基本所有的技术,最后还是决定C++搞个ActiveX...但上传的回调费了半天劲,才搞定.代码如下 STDMETHODIMP CFileSelect ...
- 大米cms爆破后台及支付逻辑漏洞
又找到个网站挖洞,我来康康. 大米手机是个什么鬼手机??看一下吧 这个支付页面好熟悉,可能存在支付逻辑漏洞,咱们用burp改个包看看. 先支付一个看看 把包里那个=1改成0试试~ 证实确实存在支付逻辑 ...
- Redis的三种持久化策略及选取建议
概述 Redis是一个基于内存的高性能的键值型数据库,它支持三种不同的持久化策略:RDB(快照).AOF(追加文件).混合.这三种策略各有优缺点,需要根据不同的场景和需求进行选择和配置.本文将介绍这三 ...
- 记一次 Visual Studio 2022 卡死分析
一:背景 1. 讲故事 最近不知道咋了,各种程序有问题都寻上我了,你说 .NET 程序有问题找我能理解,Windows 崩溃找我,我也可以试试看,毕竟对 Windows 内核也知道一丢丢,那 Visu ...
- STM32为何在诸多的单片机中脱颖而出?
1.前言 在STM32之前,都是老大头51,带着它的"小弟们" MSP430.AVR.PIC在单片机界呼风唤雨.那个时候,市场上遍布8位机,大学教材用51入门,个人.企业学单片机 ...