流程控制:循环

while:入口判断与出口判断的唯一区别,出口判断条件不满足的时候,至少执行一次循环体。
for of:将所有集合类型的数据的遍历进行了统一,是遍历的终结者

  1. const colors = ["red", "green", "blue"];
  2. // 1,while :入口判断
  3. //
  4. let i = 0;
  5. while (i < colors.length) {
  6. console.log("%c%s", "color:red", colors[i]);
  7. i++;
  8. }
  9. console.log("%c--------------", 'color:blue');
  10. // 2.while:出口判断
  11. i = 0;
  12. do {
  13. // 条件不满足的时候,至少执行一次循环体
  14. console.log(colors[i]);
  15. i++;
  16. } while (i > colors.length);
  17. console.log("%c--------------", 'color:green');
  18. // 3.for (初始变量,循环条件,条件更新)
  19. for (let i = 0; i < colors.length; i++) {
  20. console.log(colors[i]);
  21. }
  22. console.log("%c--------------", 'color:green');
  23. // 对象使用for in
  24. const lesson = { name: "js", score: 90 };
  25. for (let key in lesson){
  26. console.log("%s",lesson[key]);
  27. }
  28. console.log("%c--------------", 'color:green');
  29. // for in 也可以便利数组
  30. for (let key in colors){
  31. console.log("%s",colors[key]);
  32. }
  33. console.log("%c--------------", 'color:green');
  34. // for of 将所有集合类型的数据的遍历进行了统一,是遍历的终结者
  35. // 可以遍历数组
  36. for (let item of colors){
  37. console.log(item);
  38. }
  39. console.log("%c--------------", 'color:green');
  40. // 可以遍历对象
  41. for (let item of lesson){
  42. console.log(item);
  43. }
  44. // 报错 : lesson不是一个可以迭代的对象。

构造函数的原型与对象原型之间的区别与联系

实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承成员(属性/方法)
需要被继承的所有类实例共享的成员,应该写在构造函数原型上。
通常属性不应该被共享,他们是区分不同对象的标志,方法更适合共享。

  • 任何函数都有一个原型属性:prototype。
  • prototype对于普通函数没用,对构造函数来说才有用
  • 构造函数是”对象工厂”,是用来创建对象的
  • 对象也叫”实例”, 实例: 实际案例
  • js中没有“类”的概念,它是基于原型的语言,所以可简单的将构造函数当成“类”
  • 构造函数必须使用“new”来调用,普通函数不用
  • new 的过程就是类的实例化过程,就是创建一个对象的过程
  • 创建对象的过程,就叫“类的实例化”

    1. // 声明构造函数(行业规范:首字母大写,用来区分。)
    2. function User(name, email) {
    3. // 1. 创建出一个新对象,用this来表示(这是伪代码,系统自动创建并执行,不用写)
    4. // const this = new User;
    5. // 2.初始化对象,给这个对象添加一个自定义属性,用来和其它实例进行区分
    6. // 可以为空
    7. this.name = name;
    8. this.email = email;
    9. // 3. 返回这个对象
    10. // return this;
    11. }
    12. // 使用 new 调用
    13. const user = new User("admin", "admin@php.cn");
    14. console.log(user instanceof User);
    15. console.log(user);
    16. // 在原型属性中增加一个属性
    17. user.__proto__.salary = 8899;
    18. // 先在自由属性中找,找不到再到原型属性上找。
    19. console.log(user.salary);
    20. const user1 = new User("peter", "peter@php.cn");
    21. console.log(user1);
    22. // console.log(user1.salary);
    23. console.dir(User);
    24. // 实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承成员(属性/方法)
    25. console.log(user1.__proto__ === User.prototype);
    26. // 需要被所有类实例共享的成员,应该写到构造函数的原型上
    27. User.prototype.nation = "CHINA";
    28. console.log(user.nation, user1.nation);
    29. // 属性通常不应该共享的,它是区分不同对象的标志,方法更适合共享
    30. User.prototype.show = function () {
    31. return { name: this.name, email: this.email, salary: this.salary };
    32. };
    33. console.log(user.show());
    34. console.log(user1.show());

    获取dom元素的常用方法

    1. <ul id="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. <form action="">
    9. <input type="text" />
    10. </form>
    11. <script>
    12. // 使用css是最直观的
    13. // 1,获取满足条件的所以元素
    14. const lis = document.querySelectorAll("#list li")
    15. console.log(lis);
    16. console.log('---------------');
    17. // 2.获取满足条件的第一个元素
    18. first = document.querySelector("#list li")
    19. console.log(first);
    20. // 其他
    21. // 返回对拥有指定 ID 的第一个对象的引用
    22. id = document.getElementById('list')
    23. console.log(id);
    24. // 返回带有指定标签名的对象的集合
    25. tagname = document.getElementsByTagName('li')
    26. console.log(tagname);
    27. // 返回带有指定名称的对象的集合
    28. name = document.getElementsByName('')
    29. // 获取所有指定类名的元素
    30. classname = document.getElementsByClassName('item')
    31. console.log(classname);
    32. // 有几个快捷方式,用来快速 获取某一个或某一类元素
    33. // html
    34. // console.log(document.documentElement);
    35. // head
    36. console.log(document.head);
    37. // body
    38. console.log(document.body);
    39. // title
    40. console.log(document.title);
    41. // forms
    42. console.log(document.forms[0]);
    43. console.log(document.forms.item(0));
    44. console.log(document.images);
    45. </script>

    dom 元素的增删改查常用操作

  • 创建元素

    • createElement();
    • parent appendChild(newEl),添加到页面
    • 将html逐个添加 字符串直接解析dom元素 insertAdjacentHTML(beforeEnd(到最后))
      insertAdjacentHTML(afterBegin(到前面))
    • 如果大量添加元素应该使用文档片段完成
  • 更新

    • replaceWith()
    • replaceChild();
  • 移除

    • removeChild()
  1. <ul id="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. const ul = document.querySelector('#list')
  10. // 1.创建元素
  11. const li = document.createElement('li');
  12. // parent.appendChild(newEl),添加到页面(在父元素中调用)
  13. ul.appendChild(li);
  14. li.innerText = 'item6';
  15. // innerHTML支持代码
  16. // li.innerHTML = '<i style="color:red">item6</i>';
  17. let htmlStr = "<li style='color:red'>item7</li>";
  18. // 将html字符串直接解析为dom元素
  19. ul.insertAdjacentHTML("beforeEnd", htmlStr);
  20. // 如果大量添加元素应该使用文档片断完成
  21. // const frag = document.createDocumentFragment(); 以下是简化成构造函数
  22. const frag = new DocumentFragment();
  23. for (let i = 0; i < 5; i++) {
  24. const li = document.createElement("li");
  25. li.textContent = "Hello " + (i + 1);
  26. // 将生成的节点先临时挂载到文档片断中
  27. frag.appendChild(li);
  28. }
  29. ul.appendChild(frag);
  30. htmlStr = `
  31. <li style="color:violet">demo1</li>
  32. <li style="color:violet">demo2</li>
  33. <li style="color:violet">demo3</li>
  34. <li style="color:violet">demo4</li>
  35. <li style="color:violet">demo5</li>
  36. `;
  37. ul.insertAdjacentHTML("afterBegin", htmlStr);
  38. // 用元素不用字符串
  39. ul.insertAdjacentElement("afterBegin", li);
  40. ul.insertAdjacentHTML("afterBegin", "<li>item888</li>");
  41. // 2. 更新
  42. let h3 = document.createElement("h3");
  43. h3.innerHTML = "晚上好";
  44. document.querySelector("li:nth-of-type(3)").replaceWith(h3);
  45. ul.replaceChild(h3, document.querySelector("li:last-of-type"));
  46. // 3.移除
  47. ul.removeChild(document.querySelector("#list h3"));
  48. // 4. 遍历查询
  49. // 获取所有子元素
  50. console.log(ul.children);
  51. // 获取子元素数量
  52. console.log(ul.children.length);
  53. console.log(ul.childElementCount);
  54. // 第一个子元素
  55. console.log(ul.firstElementChild);
  56. // 最后一个
  57. console.log(ul.lastElementChild);
  58. // 父节点
  59. console.log(ul.lastElementChild.parentElement);
  60. // 前一个兄弟
  61. const jiu = document.querySelector("#list li:nth-of-type(9)");
  62. jiu.style.background = "yellow";
  63. console.log(jiu.previousElementSibling.innerHTML);
  64. // 后一个兄弟
  65. console.log(jiu.nextElementSibling.innerHTML);
  66. </script>

更多相关文章

  1. 五个Excel函数组合,效率提高一丢丢
  2. JavaScript的代码编写注意事项,建议收藏!
  3. 你真知道如何高效用mapPartitions吗?
  4. 0104 函数练习
  5. 磁盘显示函数不正确怎么恢复?
  6. 最新版Spark 3 HelloWorld
  7. tp5中在js函数中给url传参数并进行连接
  8. 常用数组函数-创建-删除-键值操作-回调函数
  9. php字符串函数

随机推荐

  1. ASP.NET 2.0在SQL Server 2005上自定义分
  2. sql server2008 日志收缩 命令行
  3. PLSQL并非所有变量都已绑定
  4. mysql5.7 启用gtid,导致无法创建和删除表
  5. MySQL This function has none of DETERM
  6. MySql WorkBench“执行查询到文本输出”
  7. mysql报错注入(显错注入)整理
  8. mysql自定义排序规则函数——field()
  9. 学习SQL Server 2005不得不看的一些图书(
  10. 使用PDO创建长插入SQL查询的最佳方法