JS基础第四天

148 阅读3分钟

JS基础第四天

一、for循环

1.for循环基本使用

1.for循环语法:

for(声明记录循环次数的变量;循环条件;变化值){
	循环体
}

1648825266996

好处:把声明起始值、循环条件、变化值写到一起,让人一目了然

如:

for(let i =1;i<= 100;i++){
      console.log(i)                   
}//输出1—100的数字

for循环和while循环有什么区别:

  • 当如果明确了循环的次数的时候推荐使用for循环
  • 当不明确循环的次数的时候推荐使用while循环

2.退出循环

循环结束:

  1. continue:结束本次循环,继续下次循环
  2. break:跳出所在的循环

continue:

for (let index = 1; index <= 10; index++) {

        if (index % 2 !== 0) {
          // 是奇数的话  就跳过这次循环
          continue//继续下次循环 输出偶数 跳过奇数
        }
        console.log(index);//最终输出是偶数
      }

break:

for (let index = 1; index <= 10; index++) {
        // 如果当前的index = 5 ,就不再往下 循环了,就终止循环
        if (index === 5) {
          break;
        }
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>21-continue和break.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
  </head>
  <body>
    <script>
      /*

      for
      控制循环结束
      1 continue 跳过本次循环 继续开启下次循环 (不是必须)
        continue 想要跳过这个循环 不一定通过它
         我们自己 if else 也能实现类似的功能
      2 break 直接 循环结束 不玩了
        也不是必须 , 我们也是可以通过  if-else 来实现它的功能 
        但是如果可以 使用break的话 尽量使用它 (性能更加好) 因为break会终止剩下的循环


      如果当前的index 是一个奇数  下面的代码就不要再运行了 开启下一个循环
      */

      // 只显示 奇数 单数
      // for (let index = 1; index <= 10; index++) {
      //   // 判断当前的index是不是奇数
      //   if (index % 2 !== 0) {
      //     // console.log(index);

      //     continue;
      //   }

      //   console.log(index,"⭐");
      // }
      // 只显示 奇数 单数
      for (let index = 1; index <= 10; index++) {
        // 判断当前的index是不是奇数
        if (index % 2 !== 0) {
          // 奇数
          console.log(index);
        }else{
          // 偶数
          console.log(index,"⭐");
        }

      }

      /*
      continute 功能 其实 也是可以通过 if else 来模拟和实现
        if else  根据条件来执行某段代码

        continute 跳过循环(不想执行某段代码)
       */

      // 只输出偶数
      // for (let index = 1; index <= 10; index++) {
      //   if (index % 2 === 0) {
      //     // 是偶数了才输出
      //     console.log(index);
      //   }
      // }

      for (let index = 1; index <= 10; index++) {

        if (index % 2 !== 0) {
          // 是奇数的话  就跳过这次循环
          continue//继续下次循环 输出偶数 跳过奇数
        }
        console.log(index);//最终输出是偶数
      }


      for (let index = 1; index <= 10; index++) {
        // 如果当前的index = 5 ,就不再往下 循环了,就终止循环
        if (index === 5) {
          break;
        }
        // //  index===5&&break // 不能简写 报错!!
        console.log(index);

        // if (index < 5) {
        //   console.log(index);
        // }
        console.log("代码调用的次数",index);//程序在第5次循环时打断了 ,此时输出的次数为前4次
      }
    </script>
  </body>
</html>

3.循环嵌套

1648826646560

注意:一个循环里再套一个循环,一般用在for循环里

二、数组

数组是什么:数组(Array)是一种可以按顺序保存数据的数据类型

1.数组的基本使用

1.声明语法

let arr=[a,b,c,......,n]

1648826876070

1648826885136

注意:

  • 数组是按顺序保存,所以每个数据都有自己的编号
  • 计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
  • 在数组中,数据的编号也叫索引或下标
  • 数组可以存储任意类型的数据
  • 如果获取的元素超过数组长度,则输出为undefined
  • 获取数组长度(数组名.length) 数组的长度为数组数据的多少

2.取值语法

  • 数组名[下标]

    1649177296074

1649177351947

术语:

  1. 元素:数组中保存的每个数据都叫数组元素
  2. 下标:数组中数据的编号
  3. 长度:数组中数据的个数,通过数组的length属性获得

3.遍历数组(重点)

用循环把数组中每个元素都访问到,一般会用for循环遍历

语法:

1649177455812

如:

1649177471369

2.操作数组

1.数组增加新的数据

1.语法:数组.push(元素1,元素2,......,元素n)

方法:将一个或多个元素添加到数组的末尾,并返回该数组的新长度 (重点 常用)

1649257671095

1649257679526

<script>
        // let arr=[`小米,苹果`]
        
        // arr.push('HUAWEI')

        // document.write(arr)


        let arr=[]
        for (let index = 0; index <=4; index++) {
            let userName=prompt('输入数据')
            arr.push(userName)
        }
        document.write(arr)
    </script>

2.语法:数组.unshift(元素n,元素1,元素2,....,元素m)

方法:将一个或多个元素添加到数组的开头,并返回该数组的新长度

1649258063397

1649258072084

1649258175815

3.小结

  1. 想要数组末尾增加数据元素利用那个方法?
    1. 数组.push(元素1,元素2,......,元素n)
    2. 可以添加一个或者多个数组元素
    3. 返回的是数组长度
  2. 想要数组开头增加数据元素利用那个方法?
    1. 数组.unshift(元素n,元素1,元素2,....,元素m)
    2. 可以添加一个或者多个数组元素
    3. 返回的是数组长度
  3. 常用
    1. arr.push()

2.数组删除元素

1.语法:数组. pop()

方法:从数组中删除最后一个元素,并返回该元素的值

1649258862314

1649258870044

2.语法:数组. shift()

方法:从数组中删除第一个元素,并返回该元素的值

<script>
        //新增
        //let arr=['苹果','西瓜','香蕉']
        // arr.push('草莓')
        // console.log(arr) //push 新增放在数组最后

        // arr.unshift('草莓')
        //  console.log(arr)//unshift 新增的元素放在第一位


        //删除
        let arr2=['苹果','西瓜','香蕉']
        //arr2.pop()
        //console.log(arr2) //删除最后一个元素

        arr2 .shift()
        console.log(arr2)//删除第一个元素
    </script>

3.删除指定元素

语法:splice(想要删除元素的下标,想要删除几个)

如:splice(1,1):从下标为1的元素开始,删除一个元素(就是本身),注意:下标是从0开始;

splice(1,2):从下标为1的元素开始,删除下标为1,2的两个元素;

1649259882135

1649259891258

4.输出数组最后一个元素

1.语法:数组.length-1 console.log(arr[arr.length-1])

5.添加或替换元素

<script>
        let arr=['a','b','c']
        //新增元素 或替换元素
        arr[2]='d'//将下标为2的元素替换
        document.write(arr)//输出 a b d

        arr[3]='f'//新增下标为4的元素
        document.write(arr)//输出 a b c f
    //注意:新增元素后数组长度会发生改变 动态变化


        arr[10]='yy'
        console.log(arr)
        //['a', 'b', 'd', 'f', 空属性 × 6, 'yy']
        console.log(arr[5])//输出为undefined 因为此时下标为5的元素为空,注意此时的数组长度为10
    </script>

注意:

  1. 数组可以随意存放任意数据(不建议)
  2. 数组快速清空或删除多个元素
    1. 直接让"数组=[ ]"
    2. 让数组.length=0
  3. 删除多个元素(减少数组长度)
let arr=[a,b,c,d,e,f,g]
arr.length=3
console.log(arr)//输出为a,b,c

6.小结

1.想要数组末尾删除1个数据元素利用那个方法?带参数吗?

  1. arr.pop()
  2. 不带参数
  3. 返回值是删除的元素

2.想要数组开头删除1个数据元素利用那个方法?带参数吗?

  1. arr.shift()
  2. 不带参数
  3. 返回值是删除的元素

3.想要指定删除数组元素用那个?开发常用吗?有那些使用场景?

  1. arr.splice(起始位置, 删除的个数)
  2. 开发很常用,比如随机抽奖,比如删除指定商品等等

三、综合案例

动态生成柱状图

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no"
    />
    <title>21-动态生成柱状图.html</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      ul {
        list-style: none;
        width: 1000px;
        height: 600px;
        margin: 100px auto;
        display: flex;
        justify-content: space-around;
        background-color: aqua;

        /* 设置侧轴的对齐方式 下对齐 */
        align-items: flex-end;
      }
      li {
        width: 100px;
        background-color: pink;
        position: relative;
      }
      span {
        position: absolute;
        top: -30px;
        left: 50%;
        transform: translateX(-50%);
      }
      div {
        position: absolute;
        width: 100%;
        text-align: center;
        /* 相对于父元素的高 */
        top: 100%;
        background-color: red;
      }
    </style>
  </head>
  <body>
    <script>
      /*

      需求分析:(用文字 把看见的需求 描述下来)
      1 一打开页面 弹出了4个 输入框
      2 用户在每一个输入框 填写数字-控制的是每一个li标签的高度
      3 最后一个输入框填写完毕了 页面上出现 4个div
      4 4个div的样式部分
        1 一行放4个元素
        2 每一个元素颜色相同 高度不同

      5 操作
        1 第4个步骤 我最熟悉了  写布局 css   已经完成了!!
        2 先实现 for循环生成4个柱子li(类似之前写过的一个 动态生成table表格)(每一个柱子的高不一样 先不管)
      */

      // 用来存放4个li标签的 字符串 原来 ul 不需要 循环 只是 li标签要循环
        let liHtml='<ul>'
        let liHeight=[]
        for (let index = 0; index < 4; index++) {
          height=+prompt(`请输入第${index + 1}季度的数据高度`)
          liHeight.push(height)

          
        }
        //let num=prompt('请输入有多少季度')
        for (let index = 0; index < 4; index++) {
          liHtml+=`<li style="height:${liHeight[index]}px;">
            <span>${liHeight[index]}</span>
            <div>第${index + 1}季度</div>
            </li>`
          
        }
        liHtml+='</ul>'
        document.write(liHtml)

      // liHTML =    `<ul></ul>`

      // 把4个li标签 写到页面上
      
    </script>
  </body>
</html>

1649260917695