欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

程序员文章站 2022-04-17 19:03:41
...
事件绑定的主体及触发者

这里面好像没啥好说的,都是老师之前教过的知识,老师也说了event都可以自己查询,是常用的

  1. <button onclick="shou()">点击</button>
  2. <ul class="lisk">
  3. <li class="li1">测试1</li>
  4. <li class="li2">测试2</li>
  5. <li class="li3">测试3</li>
  6. <li class="li4">测试4</li>
  7. <li class="li5">测试5</li>
  8. </ul>
  9. <script>
  10. function shou() {
  11. // event事件的对象,包含了很多的值 type 类型,查看当前类型,肯定就是点击咯
  12. console.log(event.type);
  13. // currentTarget绑定事件的主体,也就是标签,当前绑定的是button按钮
  14. console.log(event.currentTarget);
  15. //target事件触发者,自己想想,你点击的是谁?button按钮,所以button按钮就是触发者,也等于事件的主体
  16. console.log(event.target);
  17. // 可以试下//返回了一个true
  18. console.log(event.currentTarget === event.target);
  19. if (event.currentTarget === event.target) {
  20. console.log("完全相同");
  21. }
  22. // // 拿到li标签的一组,声明为li
  23. // const li = document.querySelectorAll("li");
  24. // // for循环拿到每一个li标签
  25. // for (i = 0, length = li.length; i < length; i++) {
  26. // // 给li标签添加一个点击事件并返回一下绑定的事件主体
  27. // // li[0]到4,.onclick添加一个点击事件
  28. // li[i].onclick = console.log(event.currentTarget);
  29. // // 查看每一个li的id
  30. console.log(i);
  31. }

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

对li标签的冒泡代码:

  1. const li = document.querySelectorAll("li");
  2. // for循环拿到每一个li标签
  3. for (i = 0, length = li.length; i < length; i++) {
  4. // 给li标签添加一个点击事件并返回一下绑定的事件主体
  5. // li[0]到4,.onclick添加一个点击事件
  6. // 老师说onclick此时,就是事件冒泡 默认就是冒泡阶段
  7. li[i].onclick = function () {
  8. console.log(event.currentTarget.textContent);
  9. console.log(event.target.textContent);
  10. console.log(event);
  11. };
  12. }

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等
冒泡的逐级上报!!
代码示例:

  1. //逐级冒泡,就是从下往上,一直到html
  2. // ul.onclick
  3. document.querySelector("ul").onclick = () => console.log(event.currentTarget);
  4. // body.onclick
  5. document.body.onclick = () => console.log(event.currentTarget);
  6. // html.onclick
  7. // documentElement 拿到html 别忘了语法糖
  8. document.documentElement.onclick = () => console.log(event.currentTarget);

示例代码截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

事件阻止冒泡:
阻止冒泡代码:
stopPropagation()
使用示例:
event.stopPropagation();
需在点击事件执行命令的函数中使用
示例代码:

  1. for (i = 0, length = li.length; i < length; i++) {
  2. // 给li标签添加一个点击事件并返回一下绑定的事件主体
  3. // li[0]到4,.onclick添加一个点击事件
  4. // 老师说onclick此时,就是事件冒泡 默认就是冒泡阶段
  5. li[i].onclick = function () {
  6. // 阻止冒泡语法糖.stopPropagation()
  7. event.stopPropagation();
  8. console.log(event.currentTarget.textContent);
  9. console.log(event.target.textContent);
  10. console.log(event);
  11. };
  12. }

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等
事件的委托:
顾名思义 事件的委托就是让另外一个标签去执行当前标签的事件行为,代码示例的li标签让父级ul
示例代码:

  1. /////////////
  2. //事件委托/////
  3. //把点击事件绑定到ul上面
  4. // 将原来逐个添加到li上的click,现在根据冒泡原理,只需要添加到父级ul一次就可以
  5. // 事件委托: 子元素上的事
  6. document.querySelector("ul").onclick = function () {
  7. // 阻止冒泡
  8. // event.stopPropagation();
  9. // 打印的绑定者是ul
  10. console.log(event.currentTarget);
  11. // 但触发者竟然是li
  12. console.log(event.target);
  13. console.log(event.currentTarget === event.target);
  14. // 从79行开始,这就是事件的委托,事件的代理,委托给了ul,li的上级触发
  15. };

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等
全部代码示例:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>事件的冒泡与事件的委托代理</title>
  7. </head>
  8. <body>
  9. <button onclick="shou()">点击</button>
  10. <ul class="lisk">
  11. <li class="li1">测试1</li>
  12. <li class="li2">测试2</li>
  13. <li class="li3">测试3</li>
  14. <li class="li4">测试4</li>
  15. <li class="li5">测试5</li>
  16. </ul>
  17. <script>
  18. function shou() {
  19. // event事件的对象,包含了很多的值 type 类型,查看当前类型,肯定就是点击咯
  20. console.log(event.type);
  21. // currentTarget绑定事件的主体,也就是标签,当前绑定的是button按钮
  22. console.log(event.currentTarget);
  23. //target事件触发者,自己想想,你点击的是谁?button按钮,所以button按钮就是触发者,也等于事件的主体
  24. console.log(event.target);
  25. // 可以试下//返回了一个true
  26. console.log(event.currentTarget === event.target);
  27. if (event.currentTarget === event.target) {
  28. console.log("完全相同");
  29. }
  30. // // 拿到li标签的一组,声明为li
  31. // const li = document.querySelectorAll("li");
  32. // // for循环拿到每一个li标签
  33. // for (i = 0, length = li.length; i < length; i++) {
  34. // // 给li标签添加一个点击事件并返回一下绑定的事件主体
  35. // // li[0]到4,.onclick添加一个点击事件
  36. // li[i].onclick = console.log(event.currentTarget);
  37. // // 查看每一个li的id
  38. console.log(i);
  39. }
  40. //为什么拿出来,因为目前实在button里面,拿到外面li就是一个单独的点击事件
  41. const li = document.querySelectorAll("li");
  42. // for循环拿到每一个li标签
  43. for (i = 0, length = li.length; i < length; i++) {
  44. // 给li标签添加一个点击事件并返回一下绑定的事件主体
  45. // li[0]到4,.onclick添加一个点击事件
  46. // 老师说onclick此时,就是事件冒泡 默认就是冒泡阶段
  47. li[i].onclick = function () {
  48. console.log(event.currentTarget.textContent);
  49. console.log(event.target.textContent);
  50. console.log(event);
  51. };
  52. }
  53. //逐级冒泡,就是从下往上,一直到html
  54. // ul.onclick
  55. document.querySelector("ul").onclick = () => console.log(event.currentTarget);
  56. // body.onclick
  57. document.body.onclick = () => console.log(event.currentTarget);
  58. // html.onclick
  59. // documentElement 拿到html 别忘了语法糖
  60. document.documentElement.onclick = () => console.log(event.currentTarget);
  61. for (i = 0, length = li.length; i < length; i++) {
  62. // 给li标签添加一个点击事件并返回一下绑定的事件主体
  63. // li[0]到4,.onclick添加一个点击事件
  64. // 老师说onclick此时,就是事件冒泡 默认就是冒泡阶段
  65. li[i].onclick = function () {
  66. // 阻止冒泡语法糖.stopPropagation()
  67. event.stopPropagation();
  68. console.log(event.currentTarget.textContent);
  69. console.log(event.target.textContent);
  70. console.log(event);
  71. };
  72. }
  73. for (i = 0, length = li.length; i < length; i++) {
  74. // 停止点击事件
  75. li[i].onclick = null;
  76. }
  77. /////////////
  78. //事件委托/////
  79. //把点击事件绑定到ul上面
  80. // 将原来逐个添加到li上的click,现在根据冒泡原理,只需要添加到父级ul一次就可以
  81. // 事件委托: 子元素上的事
  82. document.querySelector("ul").onclick = function () {
  83. // 阻止冒泡
  84. // event.stopPropagation();
  85. // 打印的绑定者是ul
  86. console.log(event.currentTarget);
  87. // 但触发者竟然是li
  88. console.log(event.target);
  89. console.log(event.currentTarget === event.target);
  90. // 从79行开始,这就是事件的委托,事件的代理,委托给了ul,li的上级触发
  91. };
  92. </script>
  93. </body>
  94. </html>
表单事件的提交验证

event配合标签
preventDefault禁止用户主动提交/本来的php提交禁用掉,用js提交数据
stopPropagation禁用掉冒泡操作
示例:

  1. // 禁用函数preventDefault()
  2. event.preventDefault();
  3. // 禁用冒泡
  4. event.stopPropagation();

老师的提交作业,是当用户失去焦点时验证,我在网上查了下代码,写了一个
使用了一个空函数message写的
这一部分代码,没啥需要截图的,直接上代码:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>表单事件</title>
  8. </head>
  9. <body>
  10. <div>
  11. <form action="" method="post" id="login">
  12. <label class="title">用户登录</label>
  13. <label for="email">邮箱:</label>
  14. <input type="email" id="email" name="email" value="" autofocus onblur="message()" />
  15. <label for="password">密码:</label>
  16. <input type="password" id="password" name="password" onblur="message()" />
  17. <button name="submit" onclick="ad(this)">登录</button>
  18. </form>
  19. <script>
  20. function ad(ele) {
  21. // 测试下弹窗
  22. // alert("测试");
  23. // 禁用提交行为,就是php带的提交 改为js提交 或者是在from里面使用一个onsubmit 返回一个false
  24. // 禁用函数preventDefault()
  25. event.preventDefault();
  26. // 禁用冒泡
  27. event.stopPropagation();
  28. console.log(event);
  29. // 拿到email方便以后的操作/是通过函数的储存的值拿的,我只能这么理解,就是ele拿的
  30. let email = ele.form.email;
  31. // 拿到password 方便以后的操作
  32. let password = ele.form.password;
  33. // 判断value的长度是否为空
  34. if (email.value.length === 0) {
  35. alert("请输入邮箱");
  36. // 如果没输入提示用户输入,光标回到email框
  37. email.focus();
  38. // 返回值,我注释了,发现还可以
  39. return false;
  40. // 判断password长度是否为空
  41. } else if (password.value.length === 0) {
  42. alert("请输入密码");
  43. // 给email 输入框返回一个光标
  44. password.focus();
  45. return false;
  46. } else {
  47. alert("验证通过");
  48. }
  49. }
  50. // 1. submit: 提交时触发
  51. // 2. focus: 获取焦点时触发
  52. // 3. blur: 失去焦点时触发
  53. // 4. change: 值发生改变且失去焦点时触发
  54. // 5. input: 值发生改变就会触发,不必等失去焦点,与change不同
  55. // 作业: 将该表单验证方式,改为失去焦点就进行非空验证, 而不必等到点击提交按钮时
  56. ///////////////////////////////////////////////////
  57. ////////////////////作业部分////////////////////
  58. function message() {
  59. if (email.value.length === 0) {
  60. alert("请输入邮箱");
  61. // 给email 输入框返回一个光标
  62. email.focus();
  63. return false;
  64. } else if (password.value.length === 0) {
  65. alert("请输入密码");
  66. return false;
  67. } else {
  68. alert("验证通过");
  69. }
  70. }
  71. </script>
  72. </div>
  73. <style>
  74. * {
  75. margin: 0;
  76. padding: 0;
  77. box-sizing: border-box;
  78. }
  79. body {
  80. width: 100vw;
  81. height: 100vh;
  82. display: grid;
  83. background-color: aquamarine;
  84. place-content: center;
  85. }
  86. div {
  87. width: 20em;
  88. height: 10em;
  89. }
  90. form {
  91. display: grid;
  92. }
  93. #login > label:first-of-type {
  94. text-align: center;
  95. }
  96. </style>
  97. </body>
  98. </html>

js运行机制之单线程(主线程)+事件循环
代码示例介绍:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>js运行机制: 单线程+事件循环</title>
  8. </head>
  9. <body>
  10. <script>
  11. // 1. 单线程: 主线程
  12. // 同步: 代码的"书写顺序"与"执行顺序"一致, 写在前面先执行
  13. console.log(1);
  14. console.log(2);
  15. console.log(3);
  16. console.log("--------------");
  17. console.log(1);
  18. setTimeout(() => console.log(2), 3000);
  19. console.log(3);
  20. // 定时任务: setTimeout(函数,等待时间)
  21. // console.log(1);
  22. // 要等待三秒后才执行,这三秒理论上说,是什么也做不了,代码到这里就"阻塞"
  23. // setTimeout(() => console.log(2), 3000);
  24. // console.log(3);
  25. // js引擎将第二个任务离开了"主线程",放到了"任务队列"的地方
  26. // 当主线程上已没有任务的时候,由"事件循环"将这个任务重新放回到主线程中执行
  27. // 执行机制
  28. // 1. 同步任务: 主线程
  29. // 2. 异步任务: 任务队列, 事件循环来调度
  30. // 哪些是异步任务?
  31. // 1. 定时任务, 2. 事件, 3, IO操作(input,output), 4. http请求
  32. // 怎么实现异步? 回调函数
  33. </script>
  34. </body>
  35. </html>
单线程异步的演示及解读:

我的代码:(我的两个输入框注意区分,一个是带定时器的 一个是不带的)

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <form action="">
  11. <input type="text" name="text" id="text" value="" onkeydown="ad(this)" />
  12. <input
  13. type="text"
  14. name="text"
  15. id="text"
  16. value=""
  17. onkeydown="setTimeout(() => {adb(this)
  18. // 当主线程带有延迟操作时,使用一次性定时器给线程增加一个定时操作,也就是异步操作
  19. }, 1); "
  20. />
  21. <input type="text" oninput="adc(this)" placeholder="input" />
  22. </form>
  23. <script>
  24. function ad(ele) {
  25. let value = ele.value;
  26. console.log(value);
  27. }
  28. function adb(ele) {
  29. let value = ele.value;
  30. console.log(value);
  31. }
  32. function adc(ele) {
  33. let value = ele.value;
  34. console.log(value);
  35. }
  36. </script>
  37. </body>
  38. </html>

老师的代码:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>单线程异步的演示</title>
  8. </head>
  9. <body>
  10. <form action="" style="display: grid; gap: 1em; width: 20em">
  11. <input type="text" onkeydown="console.log(this.value)" placeholder="同步" />
  12. <!-- 慢半拍 -->
  13. <!-- 分析为什么第一次获取不到?
  14. 1. 当按下某个键时, 它会触发keydown事件,事件循环将事件方法从任务队列添加到主线中,并立即调用,即console.log立即执行
  15. 2. 但是此时这个键对应的值,例如1, 还没有被DOM渲染到input输入框中,所以console.log获取不到值,或获取一个空值
  16. 3. 因为"按下1" 和 "显示1" 是2步操作,而console.log是在第1步结束后一瞬间执行,而值还没被显示到input框中
  17. 4. 所以, console.log()执行时机,是在"按下"与"显示"之间,所以无法获取到用户输入的内容或获取到一个空值
  18. 5. 为什么第2次按下时,console.log()可以获取到了呢?
  19. 6. 是因为当用户再次按下时, console.log()立即执行,此时input中已经有了内容,就是上一次的输入内容,所以就正常输出了 -->
  20. <!-- 解决方案也很简单,让console.log()异步执行即可,等到input框中的内容渲染完成之后再执行 -->
  21. <!-- 必知内容:
  22. 1. DOM渲染是同步任务, 这里的dom渲染,是指将内容显示到input框中
  23. 2. DOM事件是异步任务, 使用keydown
  24. 3. 异步必须在同步完成后执行
  25. -->
  26. <!-- 现在简单了, 将console.log异步调用就可以,直接放在setTimeout中就可以,将延迟设置为0 -->
  27. <!-- 因为setTimeout是异步任务,一定会等主线程中的同步任务执行完毕才会进入主线程,转为同步任务执行
  28. 而此时, dom渲染已完成, input框中已经有了数据,所以console.log()就正确的, 同步的获取到了数据
  29. 完美解决了"慢半拍"的问题 -->
  30. <input type="text" onkeydown="setTimeout(()=>console.log(this.value),0)" placeholder="异步" />
  31. <!-- 解决方案 -->
  32. <input type="text" oninput="console.log(this.value)" placeholder="input" />
  33. <!-- input = keydown + setTimeout -->
  34. </form>
  35. </body>
  36. </html>
字符中常用api-1操作
代码 示例 说明
.length str.length 索引长度
.charAt str.charAt(5) 索引返回当前的索引的字符,示例是第五个
.indexOf str.indexOf(“p”) 根据字符返回当前字符的索引
.search str.search(“中”) 跟indexOf一样,但是支持正则
.concat str.concat(“(“, “学php”, “)”) 拼装,不过现在都用+习惯来拼装了
.replace str.replace(“php”, “PHP”) 查找替换,并不是完整意义上的替换
.slice str.slice(0, 3) 根据索引取字符串
.substr str.substr(-5, 3) 根据索引字符串,支持正则和从后面提取
.split str.split(“”) 字符串拆分成数组,如果不加””就直接一个数组
.toLowerCase str.toLowerCase() 转换字母的大小写
html相关的一组 html相关的一组 html相关的一组
.link(“域名”) str.link(“域名”) 直接插入域名
.bold() str.bold() 加粗操作
.big() str.big() 加大操作
.anchor(“url”) str.anchor(“url”) 增加一个锚点,增加到name属性

没有什么比截图示例更好的了!!
上代码:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>字符中常用api-1操作</title>
  8. </head>
  9. <body>
  10. <script>
  11. let str = "pHp中文网";
  12. // .length 查询字符长度 经常用了..
  13. console.log(str.length);
  14. //.charAt 根据索引返回当前的索引的字符
  15. console.log(str.charAt(5)); //返回的是--网
  16. //.indexOf 根据字符获取索引 输入相关字符数字,返回当前数组的索引值
  17. console.log(str.indexOf("p")); //发现一个问题,里面要是俩p.返回离索引0包括索引0在内的最近的一个
  18. // .search跟indexOf一样的 但支持正则
  19. // console.log(str.search("中"));
  20. // concat 字符串的拼装
  21. console.log(str.concat("(", "学php", ")"));
  22. // 都用+和`` 拼装了
  23. // replace替换
  24. console.log(str.replace("php", "PHP")); //查找替换,只是无中生有的替换,并不是真正意义上的替换,
  25. // 重新输出一下,仍然是原来的
  26. console.log(str);
  27. // slice 取子串
  28. // 取值从0到3索引//不支持从后面取
  29. console.log(str.slice(0, 3));
  30. // substr 取子串 支持从后往前取substr(-3,3)代表从后面第三个取三个 -1就是最后一个
  31. console.log(str.substr(-5, 3));
  32. // split 字符串拆分变成数组
  33. console.log(str.split("")); //要转为数组,括号里面加个引号,如果不加,整个字符都变成了一个数组
  34. // toLowerCase, toUpperCase 大小写转换
  35. console.log(str.toLowerCase()); //刚刚改了下,中间H改成了大小,转换后又为小小了
  36. console.log(str.toUpperCase()); //转换成大写
  37. // html相关的一组
  38. console.log(`<a href="https://php.cn">${str}</a>`);
  39. // 以字符的写法更简单,其实愿意用哪个用哪个
  40. console.log(str.link("https:www.baidu.com"));
  41. console.log(str.bold()); //加粗
  42. console.log(str.big()); //加大
  43. console.log(str.anchor("url")); //增加一个name属性,值为url,也叫锚点
  44. </script>
  45. </body>
  46. </html>

上截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

数组的api-1

使用到了…rest展开、复制操作
使用到了Array.of 离散值改变为数组操作
Array.from 类数组进行转换
代码部分:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body></body>
  9. <script>
  10. let arr = [
  11. 1,
  12. 2,
  13. 3,
  14. "arr",
  15. "true",
  16. {
  17. x: 1,
  18. y: 2,
  19. },
  20. [1, 2, 3],
  21. function () {},
  22. ];
  23. console.log(arr);
  24. // 复制数组 使用... 展开
  25. let arr1 = [...arr];
  26. console.log(arr1);
  27. // 扩展数组 拿到上面的arr在展开
  28. arr = [1, 2, 3, ...arr, 7, 8, 9];
  29. console.log(arr);
  30. // Array.of 把离散值创建成数组
  31. arr = Array.of(1, 2, 3, 4, 5, 6);
  32. console.log(arr);
  33. // 如果得到的数组需要分两步操作,所以就需要二次使用,可以用...展开二次使用
  34. let ab = [1, 2, 3, 4, 5, 6];
  35. arr = Array.of(...ab);
  36. console.log(arr);
  37. </script>
  38. </html>

代码示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

数组的常用api-2-新增与删除

数组字符串
尾部新增:push,
尾部删除pop,
头部新增unshift,
头部删除shift,
删除数组delete,但索引长度不变
代码部分:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 数组字符串
  11. // 尾部新增:push, 尾部删除pop, 头部新增unshift, 头部删除shift, 删除数组delete,但索引长度不变
  12. let ab = [];
  13. // 头部新增
  14. console.log(ab.push(10, 12));
  15. // 为了确认下 看下日志
  16. console.log(ab.length);
  17. // 看下数组
  18. console.log(ab);
  19. // 删除最后一个
  20. console.log(ab.pop(12));
  21. // 查看下数组
  22. console.log(ab);
  23. // 头部新增
  24. console.log(ab.unshift(1, 8));
  25. console.log(ab);
  26. // 头部删除
  27. console.log(ab.shift(1));
  28. console.log(ab);
  29. // 删除数组
  30. delete ab[1];
  31. console.log(ab);
  32. // 先创建一个数组
  33. let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  34. delete arr[0];
  35. console.log(arr);
  36. </script>
  37. </body>
  38. </html>

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

迭代方法, 遍历元素
参数 示例 说明
forEach forEach(function(item, index, arr){…}) forEach使用方法 forEach(function(item, index, arr){…})没个元素单独的逐个回调处理,使用方法 forEach(function(数组的值, 数组的索引(或者键), 数组){…})
map 跟forEach类似,但是有返回值
every arr.every(item => item >= 3) every数组成员全部满足条件则返回true 否则返回false
some arr.some(item => item >= 3) some数组成员只要任何一方满足条件就为真,否则为假//////类似或操作
filter arr.filter(ab => ab >= 3) 返回满足条件的元素的新数组
find arr.find(ab => ab >= 5) 返回满足条件的第一个元素
findIndex arr.findIndex(ab => ab >= 5) 返回满足条件的第一个元素的索引
reduce arr.reduce((acc, cur, index, arr) => acc + cur); 归并操作 有四个值,第一个值是acc累加器,第二个值是当前的值,第三个是当前值对应的索引,第四个值是当前要处理的数组

以上代码中可能示例带了arr数组看不明白,可以直接看下代码跟截图
代码示例:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>数组常用api迭代遍历</title>
  7. </head>
  8. <body></body>
  9. <script>
  10. // 迭代方法, 遍历元素
  11. // 1. forEach,map///foreach不带返回值,map带返回值
  12. // 2. every, some
  13. // 3. filter, find, findIndex
  14. // 4. reduce
  15. //append, 追加元素
  16. //classlist.add是添加css样式名
  17. //////////////////////////////////////
  18. ///////////forEach查询/////////////////
  19. // forEach使用方法 forEach(function(item, index, arr){...})没个元素单独的逐个回调处理
  20. // forEach使用方法 forEach(function(数组的值, 数组的索引(或者键), 数组){...})没个元素单独的逐个回调处理
  21. // item为值,index为索引,arr为数组
  22. let arr = [2, 3, 4, 5, 6, 7, 8, 9, 10];
  23. // 其中,item 也就是数组的值,是必须的,其他都是可选的
  24. let arrs = arr.forEach(function (item, index, arr) {
  25. console.log(item, index, arr);
  26. // 在当前这个函数中,把item值追加到body中
  27. document.body.append(item);
  28. });
  29. // console.log(arrs); //测试验证 无返回值
  30. ////////////////////////////////////////
  31. ///map与foreach是一样的,只不过有返回值/////
  32. // 比如我想为当前元素的值*2返回示例
  33. arrs = arr.map(function (item) {
  34. return item * 2;
  35. });
  36. // 返回值比22行的arr全部都*2了
  37. console.log(arrs);
  38. /////////////////////////////
  39. ///////every, some只有俩值,true,false//////////
  40. // every数组成员全部满足条件则返回true 否则返回false//
  41. console.log(
  42. arr.every(function (item) {
  43. return item >= 0;
  44. })
  45. );
  46. console.log(arr.every(item => item >= 3));
  47. ///some数组成员只要任何一方满足条件就为真,否则为假//////类似或操作
  48. console.log(
  49. arr.some(function (ab) {
  50. return addEventListener >= 0;
  51. })
  52. );
  53. console.log(arr.some(ab => ab <= 5));
  54. // filter 返回满足条件的元素的新数组
  55. console.log(arr.filter(ab => ab >= 3));
  56. console.log(arr.filter(ab => ab <= 5));
  57. //find 返回满足条件的第一个元素
  58. console.log(arr.find(ab => ab >= 5));
  59. //findIndex 返回满足条件的第一个元素的索引
  60. console.log(arr.findIndex(ab => ab >= 5));
  61. //reduce 归并操作 有四个值,第一个值是acc累加器,第二个值是当前的值,第三个是当前值对应的索引,第四个值是当前要处理的数组
  62. // res = arr.reduce(function(acc, cur, index, arr) {
  63. // console.log("acc=", acc, "cur=", cur, "index=", index, "arr=", arr);
  64. // // 最终的结果用acc累加器返回
  65. // return acc + cur;
  66. // }//起始值);//支持起始值 例如从1开始,或者从2开始
  67. res = arr.reduce(function (acc, cur, index, arr) {
  68. console.log("acc=", acc, "cur=", cur, "index=", index, "arr=", arr);
  69. // 最终的结果用acc累加器返回
  70. return acc + cur;
  71. });
  72. console.log(res);
  73. res = arr.reduce((acc, cur, index, arr) => acc + cur);
  74. console.log(res);
  75. </script>
  76. </html>

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等

数组的排序更新删除插入替换等操作

使用到的参数:
sort 数组内的数字排序
join 拼接,对数组转为字符串拼接
slice 数组的子元素取值
splce 支持任何位置删除 新增,替换操作
扩展学习 数据比较多,是一个数组,照样可以插入
使用splce +…
例如arr.splice(1, 0, ...art)
代码示例:

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body></body>
  9. <script>
  10. //sort 数组内的数字排序
  11. let arr = [1, 10, 20, 6];
  12. // 默认是安装unf啥的浏览器编码排序的
  13. console.log(arr.sort());
  14. // 要想把数字进行正确排序,该怎么排序呢?增加一个函数 如下
  15. console.log(
  16. arr.sort(function (a, b) {
  17. // 升序排列
  18. return a - b;
  19. })
  20. );
  21. console.log(
  22. arr.sort(function (a, b) {
  23. //降序排列
  24. return b - a;
  25. })
  26. );
  27. //join 拼接,对数组转为字符串拼接
  28. console.log(arr.join("-"));
  29. console.log(arr.join("."));
  30. arr = ["red", "blue", "green"];
  31. // 默认为逗号拼接
  32. console.log(arr.join());
  33. //slice 数组的子元素取值
  34. arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  35. console.log(arr.slice(2, 4));
  36. // 省略后取值是直接从第3个,因为索引是0,所以后面全要
  37. console.log(arr.slice(2));
  38. // 支持负数提取
  39. console.log(arr.slice(-6, -3));
  40. //splce 支持任何位置删除 新增,替换操作
  41. console.log(arr);
  42. // 前面是索引,后面是删除数,就是从索引1的位置删除2个
  43. console.log(arr.splice(1, 2));
  44. console.log(arr);
  45. //更新操作 删除之后》增加新值
  46. console.log(arr.splice(1, 2, "666", "888"));
  47. console.log(arr);
  48. //插入操作 插入操作即不删除,只新增,所以删除的值为0
  49. console.log(arr.splice(1, 0, "niu", "b"));
  50. console.log(arr);
  51. // 扩展学习 数据比较多,是一个数组,照样可以插入
  52. let art = ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"];
  53. console.log(arr.splice(1, 0, ...art));
  54. console.log(arr);
  55. </script>
  56. </html>

示例截图:
学习了事件的冒泡与事件的委托代理以及表单提交验证js线程运行机制还有字符的拼接截取替换html插入以及数组常用的api,例如转类数组增删遍历归并删除替换等