思考:在一个循环体中,为何可以定义变量?这不是重复定义吗?

变量声明了9次。
但不会出现重复声明的错误,超出作用域{}后,该变量销毁,再次进入{}后,重声明一个变量。
以动态的观点去看,就能理解,没有重复声明。

{}的含义是代码块。在代码块内侧定义的变量,作用域范围在代码块。变量声明是编译期间的事,与作用域有关

1.for循环:

image.pngimage.png
for(初始化表达式;条件判断语句;条件控制语句){
循环体语句
}
image.pngimage.png
for循环与while循环的区别:
for循环: 当如果明确了循环的次数的时候推荐使用for循环
while循环: 当不明确循环的次数的时候推荐使用while循环

  1. // 循环语句的跳出:break和continue
  2. for (let i = 1; i <= 10; i++) {
  3. console.log(i)//1 2 3 4 5
  4. if (i === 5) {
  5. //如果i ===5时 循环中断
  6. break;
  7. }
  8. }
  9. // 在循环体里面当遇到 continue关键字中断本次循环 然后继续执行下一次循环
  10. for (let i = 1; i <= 10; i++) {
  11. if (i === 5) {
  12. continue
  13. // 如果i等于5时 跳出第5个
  14. }
  15. console.log(`洗第${i}个碗`) //1 2 3 4 6 7 8 9 10
  16. }

image.png
说明区别:
1. break: 一般用于结果已经得到, 后续的循环不需要的时候可以使用
2. continue: 一般用于排除或者跳过某一个选项的时候, 可以使用continue
鸡兔同笼案例:

  1. //今有鸡兔同笼,上有三十五头,下有九十四腿,问鸡兔各几何?
  2. //穷举法:
  3. //鸡腿2 兔腿4
  4. //假设 鸡有 1只 兔为35-1只 1*2 + (35-1)*2 ?=== 94
  5. //假设 鸡有 2只 兔为35-2只 2*2 + (35-2)*2 ?=== 94
  6. //假设 鸡有 j只 兔为35-j只 j*2 + (35-j)*2 ?=== 94
  7. //总共35个头 遍历从1到35
  8. for (let j = 1; j <= 35; j++) {
  9. // 初始 鸡 1只 //兔 35 - 1只
  10. let t = 35 - j;
  11. // 如果 鸡*2 的腿 + 兔*4的腿 = 94
  12. if (j * 2 + t * 4 === 94) {
  13. //条件成立 输出语句
  14. document.write('鸡有' + j + '只,兔有' + t + '只')
  15. // 结果已经得到, 后续的循环不需要的时候可以使用
  16. break;
  17. }
  18. }

双层for循环嵌套:

  1. div {
  2. display: inline-block;
  3. height: 25px;
  4. line-height: 25px;
  5. margin: 5px;
  6. border: 1px solid hotpink;
  7. background-color: deeppink;
  8. color: pink;
  9. border-radius: 5px;
  10. box-shadow: 2px 2px 2px 2px rgba(0, 0, 0, 0.2);
  11. padding: 0 5px;
  12. }
  1. // 外层循环:控制图形的行 i = 1表示 图像第一行 // 内层循环:控制每一行 列的数量 // 第一行 i = 1:只有1个星星 也就说明 里面的循环只需要循环 1次 // 第二行 i = 2:只有2个星星 也就说明 里面的循环只需要循环 2次 // 第三行 i = 3:只有2个星星 也就说明 里面的循环只需要循环 3次 // ....... for (let i = 1; i <= 5; i++) { for (let j = 1; j <= i; j++) { document.write('⭐') } document.write('<br>') }
  2. // 打印99乘法表:
  3. for (let i = 1; i <= 9; i++) {
  4. for (let j = 1; j <= i; j++) {
  5. document.write(`
  6. <div>${j}&times; ${i} = ${i * j}</div>
  7. `)
  8. }
  9. document.write('<br>')
  10. }

思考:在一个循环体中,为何可以定义变量?这不是重复定义吗?

变量声明了9次。
但不会出现重复声明的错误,超出作用域{}后,该变量销毁,再次进入{}后,重声明一个变量。
以动态的观点去看,就能理解,没有重复声明。
{}的含义是代码块。
在代码块内侧定义的变量,作用域范围在代码块。
变量声明是编译期间的事,与作用域有关

数组:

什么是数组? 为什么需要数组?
数组(Array)是一种可以按顺序保存数据的数据类型
元素:数组中保存的每个数据都叫数组元素
下标:数组中数据的编号
长度:数组中数据的个数,通过数组的length属性获得
image.png

数组的使用:

数组本质是数据集合,使用无非就是增删改查

image.png


arr.push(新增的内容):

  1. 数组.push( ) 方法将一个或多个元素添加到数组的**末尾**,并返回该数组的新长度<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/25421229/1639132874130-79dc13d9-d6ec-4b2b-beac-1cf877436456.png#clientId=ufa34f537-94f2-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uff8e1e58&margin=%5Bobject%20Object%5D&name=image.png&originHeight=328&originWidth=676&originalType=url&ratio=1&rotation=0&showTitle=false&size=62774&status=done&style=none&taskId=u4bfbb4be-67bf-4bca-89e5-b4a57eb4786&title=)

arr.unshift(新增的内容):
arr.unshift(新增的内容) 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度
image.png
image.png


删:
arr.pop()

image.png

arr.shift()
image.png

arr.splice(操作的下标,删除的个数)
image.png

image.png

小结:
1. 想要数组末尾删除1个数据元素利用那个方法?带参数吗?
arr.pop() 不带参数 返回值是删除的元素
2. 想要数组开头删除1个数据元素利用那个方法?带参数吗?
arr.shift() 不带参数 返回值是删除的元素
3. 想要指定删除数组元素用那个?开发常用吗?有那些使用场景?
arr.splice(起始位置, 删除的个数)
开发很常用,比如随机抽奖,比如删除指定商品等等


数组[下标]

image.png


数组[下标] = 新值

image.png

遍历数组:
image.png