博客列表 >js 流程控制 和 DOM操作

js 流程控制 和 DOM操作

至诚网络的博客
至诚网络的博客原创
2021年10月05日 22:11:05542浏览

解构赋值

  1. <script>
  2. // 将用户名,邮箱,保存到独立 变量中
  3. const user = ["小明", "xm@qq.com"];
  4. let userName = user[0];
  5. let userEmail = user[1];
  6. // es6, 用解构完成以上功能 将多值/引用,解析到单值变量中
  7. // 主要针对 数组, 对象
  8. // 1. 数组解构
  9. // 左边模板 = 右边具体的值
  10. let [name, email] = ["小明", "xm@qq.com"];
  11. //更新
  12. [name, email] = ["灭绝", "mj@qq.com"];
  13. // 参数不足: 可以添加默认参数
  14. [name, email, age = 18] = ["灭绝", "mj@qq.com"];
  15. // 参数过多: 归并参数
  16. let [a, b, c, d, ...e] = [1, 2, 3, 4, 5, 6, 7];
  17. console.log(a, b, c, d, e);
  18. // 交换二个数 用传统思维
  19. let x = 10,
  20. y = 20;
  21. console.log("x = %d, y = %d", x, y);
  22. // let t = 0;
  23. // t = x;
  24. // x = y;
  25. // y = t;
  26. // 使用解构一行搞定
  27. [y, x] = [x, y];
  28. console.log("x = %d, y = %d", x, y);
  29. // 2. 对象解构
  30. let { id, course, score } = { id: 1, course: "JS", score: 88 };
  31. // 属性与变量同名
  32. console.log(id, course, score);
  33. // 无声明赋值
  34. // 等号左边的数据,左值,禁止出现大括号 , 使用括号包住将它转为表达式进行求值
  35. ({ id, course, score } = { id: 2, course: "PHP", score: 99 });
  36. console.log(id, course, score);
  37. // 使用别名,防止命名冲突
  38. let { name: myName, email: myEmail } = {name: "灭绝",email: "mj@qq.com",};
  39. console.log(myName, myEmail);
  40. // 对象的复制
  41. let { ...r } = { a: 1, b: 2, c: 3 };
  42. console.log(r);
  43. // 3. 解构用在函数参数
  44. // function getUser(user) {
  45. // console.log(user.id, user.name, user.email);
  46. // }
  47. // 作用解构来简化传参与使用
  48. function getUser({ id, name, email }) {
  49. console.log(id, name, email);
  50. }
  51. getUser({ id: 156, name: "李四", email: "ls@a.com" });
  52. </script>

流程控制

分支 ( if 与 switch )

  1. <script>
  2. // 代码块, 无条件执行
  3. {
  4. // var , let 区别在于是否支持块级的作用域
  5. // var a = 123; // 外面可以访问 这叫变量泄露
  6. // let a = 123; // 外面不能访问到
  7. console.log("Hi, 晚上好");
  8. }
  9. // console.log(a);
  10. // 代码块: 有条件
  11. let status = false;
  12. // 单分支
  13. if (status) {
  14. console.log("Hi, 晚上好");
  15. }
  16. // 双分支
  17. if (status) {
  18. console.log("Hi, 晚上好");
  19. } else {
  20. console.log("Hi , 上午好");
  21. }
  22. // 多分支
  23. status = 88;
  24. // === 恒等,二个数据不仅值要相等, 而且类型也要相等,不会触发类型的自动转换
  25. if (status === 1) {
  26. console.log("Hi, 晚上好");
  27. } else if (status === 2) {
  28. console.log("Hi , 中午好");
  29. } else if (status === 3) {
  30. console.log("Hi , 下午好");
  31. } else {
  32. // 当所有条件都不满足,就走到这: 默认分支
  33. console.log("参数错误");
  34. }
  35. // switch来简化多分支
  36. status = 1;
  37. switch (status) {
  38. case 1:
  39. console.log("Hi, 晚上好");
  40. break;
  41. case 2:
  42. console.log("Hi , 中午好");
  43. break;
  44. case 3:
  45. console.log("Hi , 下午好");
  46. break;
  47. default:
  48. // 当所有条件都不满足,就走到这: 默认分支
  49. console.log("参数错误");
  50. }
  51. // 简化方案
  52. // 1. 如果只有一条语句,可以不写大括号
  53. if (true) console.log("Hello world");
  54. // 2. 双分支可以用"三元运算符"进行简化
  55. // 条件 ? 为true 时 : 为false时
  56. 10 < 5 ? console.log(true) : console.log(false);
  57. // 多条语句也可以用三元来简化,但是要与IIFE(立即执行函数配合)
  58. 10 > 5
  59. ? (function () {
  60. console.log("true时结果:");
  61. console.log(true);
  62. })()
  63. : (function () {
  64. console.log("false时结果:");
  65. console.log(false);
  66. })();
  67. </script>

循环 ( while 与 for )

  1. <script>
  2. // 循环有三个要素: 1. 循环变量 2. 循环条件 3. 更新循环条件
  3. const lang = ["html", "css", "js"];
  4. // 1. while():入口循环, 进入循环前必须判断一次循环条件
  5. let i = 0;
  6. while (i < lang.length) {
  7. console.log(lang[i]);
  8. i = i + 1;
  9. }
  10. // do-while(): 出口判断型, 所以条件不论是否满足, 都会执行一次循环体
  11. i = 0;
  12. do {
  13. console.log(lang[i]);
  14. i = i + 1;
  15. } while (i > lang.length);
  16. console.log("----------");
  17. // 2. for
  18. // for ( 循环变量初始化; 循环条件; 更新循环条件)
  19. for (let i = 0; i < lang.length; i++) {
  20. console.log(lang[i]);
  21. }
  22. // 简写 只有一条语句,可以不写大括号
  23. for (let i = 0; i < lang.length; i++) console.log(lang[i]);
  24. console.log("========");
  25. </script>

遍历

  1. <script>
  2. // for - of 遍历数组
  3. const lang = ["html", "css", "js"];
  4. // for (item of arr) {}
  5. // item 代表数组中的每一个成员
  6. for(item of lang){
  7. console.log(item);
  8. }
  9. // for (item of lang) console.log(item);
  10. // forEach()遍历数组
  11. // 函数是一个对象, 对象是一个值,是值就可以传递或保存,所以函数可以当成参数,传给另一个函数
  12. // 当函数做为参数是,称为"回调函数"
  13. lang.forEach(function (item, index, array) {
  14. console.log(item, index, array);
  15. });
  16. // 只有第一个参数:数组成员才是必须的
  17. lang.forEach(function (item) {
  18. console.log(item);
  19. });
  20. // 箭头函数
  21. lang.forEach((item) => console.log(item));
  22. // 5. for - in : 遍历对象
  23. let user = { id: 1, "my name": "zhu", age: 18 };
  24. // for (属性/键名 in 对象) {}
  25. for (let key in user) {
  26. console.log(user[key]);
  27. }
  28. </script>

访问器属性

  1. <script>
  2. let user = {
  3. data: { name: "猪老师", age: 18 },
  4. getage() {
  5. return user.data.age;
  6. },
  7. setage(age) {
  8. return user.data.age = age;
  9. },
  10. };
  11. //默认访问方式 console.log(user.data.name);
  12. console.log(user.getage());
  13. user.setage(30);
  14. console.log(user.getage());
  15. // 根据用户的访问习惯 用户更愿意用下面的方式进行访问
  16. // 读 console.log(user.age);
  17. // 写 user.age = 60;
  18. // 使用"访问器属性"将方法伪装成"属性"
  19. user = {
  20. data: { name: "猪老师", age: 18 },
  21. // 在以属性名命名的方法前,添加上get,set将该方法伪装成一个属性
  22. get age() {
  23. return user.data.age;
  24. },
  25. set age(age) {
  26. return user.data.age = age;
  27. },
  28. };
  29. // 读
  30. console.log(user.age);
  31. // 写
  32. user.age = 60;
  33. console.log(user.age);
  34. </script>

DOM 操作

  • document 代表当前 html 文档对象
  • document.querySelectorAll: 返回满足条件的元素集合
  • document.querySelector: 返回满足条件的元素集合中的第一个,通常用来获取某一个元素
  1. <form action="" name="login" id="mylogin">
  2. <!-- 使用对象属性的点语法(name属性)来访问表单中的每个数据 -->
  3. <input type="email" name="email" value="admin@php.cn" />
  4. <button>提交</button>
  5. </form>
  6. <script>
  7. // 怎么获取form元素
  8. // let form = document.querySelector("form");
  9. // form = document.forms[0];
  10. // form = document.forms.item(0);
  11. // form = document.forms.login;
  12. // form = document.forms.mylogin;
  13. // form中id,name功能相同,推荐使用id
  14. // email控件中, name属性,即是后端的变量名,也可以当成id使用
  15. // email 是 name="email",它是name属性的值
  16. // console.log(form.email);
  17. // console.log(form.email.value);
  18. // let value = document.forms.login.email.value;
  19. let value = document.forms.mylogin.email.value;
  20. </script>

dom树的遍历

  • firstElementChild 返回对象的第一个子 元素
  • lastElementChild 返回对象的最后一个子 元素
  • nextElementSibling 返回对象的下一个兄弟 元素
  • previousElementSibling 返回对象的前一个兄弟 元素
  • children 属性返回元素的子元素的集合 是一个 HTMLCollection 对象。
  • childNodes 属性返回包含被选节点的子节点的 NodeList。
  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item">item2</li>
  4. <li class="item">item3</li>
  5. <li class="item">item4</li>
  6. <li class="item">item5</li>
  7. </ul>
  8. <script>
  9. // dom: 你看到的所有内容都是"节点" 节点类型: 元素,文本,文档
  10. let ul = document.querySelector(".list");
  11. // 查看所有节点(不区分类型)
  12. console.log(ul.childNodes); // 返回 NodeList 节点集合
  13. console.log(ul.children); // 返回 HTMLCollection 元素集合
  14. // ul.children是类数组,需要转为真正的数组才可使用数组方法来遍历
  15. // 转为真数组的二种方式
  16. console.log(Array.from(ul.children));
  17. console.log([...ul.children]);
  18. // [...ul.children].forEach(item => (item.style.color = "red"));
  19. // [...ul.children][0].style.color = "blue";
  20. // ul.firstElementChild.style.background = "yellow";
  21. // ul.firstElementChild.nextElementSibling.style.background = "green";
  22. // ul.lastElementChild.style.background = "yellow";
  23. // ul.lastElementChild.previousElementSibling.style.background = "violet";
  24. </script>

dom元素的创建

  • createElement 方法可创建元素节点。
  • textContent 属性设置或者返回指定节点的文本内容。
  • insertAdjacentElement(‘插入位置’, 元素)
  1. <script>
  2. // 创建元素
  3. // 内存中,页面中不可见
  4. let div = document.createElement("div");
  5. let p = document.createElement("p");
  6. p.textContent = "hello world";
  7. // 添加到页面中
  8. p.append("大家好");
  9. div.append(p);
  10. document.body.append(div);
  11. const li = document.createElement("li");
  12. li.textContent = "第一个";
  13. div.append(li);
  14. // insertAdjacentElement('插入位置', 元素)
  15. // 插入位置有四个
  16. // afterBegin: 开始标签之后,第一个子元素
  17. // beforeBegin: 开始标签之前,是它的前一个兄弟元素
  18. // afterEnd: 结束标签之后,它的下一个兄弟元素
  19. // beforeEnd: 结束标签之前,它的最后一个子元素
  20. const item = document.createElement("li");
  21. item.textContent = "大家再坚持一会";
  22. div.insertAdjacentElement("beforeBegin", item);
  23. const h3 = document.createElement("h3");
  24. h3.textContent = "我有点饿了";
  25. div.insertAdjacentElement("beforeEnd", h3);
  26. </script>

自定义属性: dataset对象

  1. <!-- id,class: 内置/预定义
  2. email, index: 自定义/ 数据属性 -->
  3. <div id="user" class="active" data-email="admin@php.cn" data-index="5">
  4. <h2>Hello world</h2>
  5. </div>
  6. <script>
  7. const div = document.querySelector("#user");
  8. // console.log(div["data-email"]);
  9. console.log(div.dataset.email);
  10. console.log(div.dataset.index);
  11. // dataset对象: 用于获取用户的自定义属性
  12. // 自定义必须使用data-为前缀, 访问时前缀不要写
  13. </script>

css对象 classList

  1. <h2>Hello world</h2>
  2. <style>
  3. .red {color: red;}
  4. .bgc {background-color: yellow;}
  5. .blue {color: blue;}
  6. h2 {border: 5px solid #000;}
  7. </style>
  8. <script>
  9. // 以前添加类
  10. // document.querySelector("h2").className = "red bgc";
  11. const h2 = document.querySelector("h2");
  12. h2.classList.add("red");
  13. h2.classList.add("bgc");
  14. h2.classList.remove("bgc");
  15. h2.classList.replace("red", "blue");
  16. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议