• 返回首页

      前端学习笔记——By Bug

      文档说明

      笔记开始日期:2024年2月22日 笔记最新更新日期:2024年3月11日 笔记更新状态:正在更新......

      你好:

      首先感谢你使用这份笔记手册,一起学习,一起进步,本学习笔记是我在自学过程(网课视频在下方链接)中的随手笔记,可能出现遗漏,顺序错误或语法,单词等错误,你可以在自己的学习过程中对这份笔记更正即可。 这个笔记是我重新学习前端时所创建的,所以省略了很多内容。其他缺失的部分如有需要可参见开发文档

      参考资料:

      前言到此结束。下面是笔记部分:


      HTLM+CSS篇

      暂未更新

      JavaScript篇

      ##

      输入和输出语句

       

      变量声明和赋值

      变量更新时,不需要加关键字(let var等),否则会报错

       

      常量

      注意:常量不能被重新赋值,必须在声明赋值。

      数据类型

      基本数据类型

      JS是一种弱类型的语言,在赋值后才知道是什么数据类型。

      引用数据类型

       

      模板字符串

      模板字符串通常用来拼接字符串和变量

      数据类型转换

      在JavaScript中,prompt,input输入的数据为string类型,如输入数字进行运算时,需要转换成数字型。

      检查数据类型方法

      显式转换

      隐式转换

      运算符

      算术运算符

      符号含义
      +求和
      -求差
      *求积
      /求商
      %取余

      比较运算符

      运算符含义
      >大于
      <小于
      >=大于等于
      <=小于等于
      ==等于
      ===全等(值和类型都必须相同)
      !=不等
      !==全不等

      比较运算符的返回值为bool类型,true或false

      赋值运算符

      =,+=,-=,*=,/=,%=

      一元运算符

      自增: 后置自增:a++ 先使用再自增 前置自增:++a 先自增再使用

      自减:a-- 后置自减:a-- 先使用再自减 前置自减:--a 先自减再使用

      逻辑运算符

      运算符含义备注
      &&逻辑与一假则假
      ||逻辑或一真则真
      !逻辑非真变假,假变真

      运算符优先级

      image-20240223104132025

      分支语句

      if分支

      switch分支

       

      三元运算符

       

      循环语句

      for循环

      while循环

      do-while循环

      循环退出

      continue:跳过本次循环,开始下次循环 break:终止循环

      数组(Array)

      数组声明

      数组中可以存储任意类型的数据

      数组操作

      增加

      修改

      查询/筛选

      删除

      数组方法

      map()

      map可以遍历数组处理数据,并返回新的数组

      image-20240307200110964

      join() 将数组中的元素转换成一个字符串

      forEach()

      filter()

      reduce()

      其他方法 更多数组方法,见MDN文档

      案例

      求数组的最大值(最小值同理)

      函数

      函数是被设计为执行特定任务的代码块。

      基本语法

      函数参数

      函数返回值

      注意

      匿名函数

      没有函数名的函数

      逻辑中断

      注意: 逻辑中断只存在“&&”和“||”中,当满足一定条件时,右侧的代码就不执行了 &&:左边为false短路 ||:左边为true短路

      对象

      对象声明

      对象操作

      增加

      删除

      修改

      查询

      对象方法

      遍历对象

      对象是无序的,不能使用下标

      内置对象

      数学内置对象

      请参阅MDN文档--

      随机数函数


      Web API

      API作用:通过js操作html和浏览器

      DOM(文档对象模型)

      可以操作网页内容,实现开发网页内容特效和实现用户交互

      DOM树

      image-20240226123407626

      DOM对象

      获取DOM元素

      操作元素内容

      innerText只识别文字,不解析标签innerHTML可以将文本内容添加或更新到标签的任意位置 innerHTML会解析标签,多标签使用模板字符串

      操作元素属性

      操作常用属性
      操作样式属性
      操作表单元素属性

      操作方法同上,语法:对象.属性=值

      自定义属性

      定时器

      开启定时器

      关闭定时器

      事件

      事件监听
      事件类型
      鼠标事件

      区别:

      所有的鼠标事件,事件处理程序中的事件对象,都为 MouseEvent

       

      键盘事件

      keydown、keypress 如果阻止了事件默认行为,文本不会显示。

      KeyboardEvent

      表单事件
      其他事件

      页面加载事件

      DOMContentLoaded事件

      页面滚动事件

      事件名:scroll

      获取位置

      scrollLeft和scrollTop(属性)

      获取html元素的方法

      页面尺寸和位置

      事件名:resize

      client家族:显示可见部分的宽度高度等数据 包含padding,不包含border

      offset家族:与client相似,但可以包含padding和border

      位置 offsetLeft,offsetTop获取元素与左侧和上侧的位置 注意:这两个属性均为只读属性,不可写 获取的数据是最近一级带有定位的父级元素的左侧和上侧的距离

      更多事件参考:事件参考 | MDN (mozilla.org)

      事件对象event

      事件对象属性

      环境对象this

      this是指向的函数的调用者,谁调用就是谁

      回调函数

      如果函数A的结果传递给函数B,则称函数A为回调函数

      事件流
      事件捕获(了解)

      由大到小

      事件冒泡

      由小到大

      什么是事件冒泡? 当一个元素的事件被触发时,同样的事件将会在该元素所有祖先元素中依次被触发,这一过程被称为事件冒泡。

      当点击two时,会向上冒泡执行one 和max

      阻止冒泡

      由于冒泡时默认存在的,容易影响到父级元素,在需要时,要进行阻止冒泡

      阻止默认行为

      e.preventDefault()

      解绑事件

      注意,匿名函数无法解绑,如需解绑函数,需要为函数命名

      鼠标事件的区别

      事件委托

      点击每个元素时,都会触发父元素ul的事件

      ===============

      如何知道点击的那个对象

      使用事件委托实现导航栏 示例

      日期对象

      日期对象方法

      方法作用说明
      getFullYear()获取年份4位:2022
      getMonth()获取月份取值:0-11
      getDate()获取月份的每一天月份不同取值不同
      getDay()获取星期取值:0-6
      getHours()获取小时取值:0-23
      getMinutes()获取分钟取值:0-59
      getSeconds()获取秒取值:0-59

      日期对象时间戳

      时间戳是从1970年1月1日0时0分0秒时起到现在的毫秒数,是一种时间计量方式

      获取时间戳的三种方式

      节点操作

      查询节点

      子节点查找

      兄弟节点查找

      增加节点

      删除节点

       

      M端事件(移动端)

       

      触屏touch事件说明
      touchstart手指触摸到一个DOM元素时触发
      touchmove手指在一个DOM元素上滑动时触发
      touchend手指从一个DOM元素上移动时触发
      JS插件

      熟悉官网,了解这个插件可以完成什么需求

      https://www.swiper.com.cn/

      看在线演示,找到符合自己需求的demo

      https://www.swiper.com.cn/demo/index.html

      查看基本使用流程

      https://www.swiper.com.cn/usage/index.html

      查看APi文档,去配置自己的插件

      https://www.swiper.com.cn/api/index.html

       

      window对象

      BOM(浏览器对象模型)

      image-20240306195908238

       

      定时器-延时函数

      设置延时函数 setTimeout(回调函数,等待时间) 特点:执行一次后自动关闭,不再执行

      清除延时函数 clearTimeout(name)

       

      JS执行机制

      JavaScript语言最大特点就是单线程,同一时间只能做一件事。 单线程意味着所有任务都要排队,前面一个任务执行完,后一个任务才能开始,这会导致如果JS执行时间过车,会造成页面渲染不连贯,导致页面渲染加载阻塞的感觉 为了解决这个问题,利用多核CPU的计算能力,HTML5提出web worker标准,允许JavaScript创建多线程,于是JS中出现了同步和异步 同步:前一个任务执行完成后,再执行后一个任务 异步:前一个任务需要较长时间时,等待的时间可以处理其他任务

       

      location对象

      location的数据类型是对象,他拆分并保存了url地址的各个组成部分

      navigator对象主要记录了浏览器自身的相关信息

      history对象

      history对象主要管理历史记录,该对象与浏览器地址栏的操作相对应,如:前进,后退,历史记录等

      常用对象和方法

      方法作用
      back()后退功能
      forward()前进功能
      go(参数)前进/后退功能,参数为1则前进一个界面,为-1则后退1个界面

      本地储存

      1. 数据存储在浏览器中

      2. 设置读取方便,刷新页面时不会丢失数据

      3. 容量较大。sessionStorage和localstorage约5M左右

      localstorage localstorage可以永久将数据存储在本地,除非手动删除 特点: 可以多窗口共享 以键值对形式存储

      储存数据

      本地存储只能存储字符串类型

      存储复杂数据类型

       

      正则表达式

      参考MDN手册解释


      JS进阶部分

      作用域

      局部作用域

      1. 函数作用域

        1.函数内部声明的变量,在函数外部无法被访问

        2.函数的参数也是函数内部的局部变量

        3.不同函数内部声明的变量无法互相访问

        4.函数执行完毕后,函数内部的变量实际被清空了

      2. 块作用域

        JavaScript中使用{ }包裹的代码称为代码块,代码块内部生命的变量将【有可能】无法访问 1.let声明的变量会产生块作用域,var不会产生块作用域

        2.const 声明的常量也会产生块作用域

        3.不同代码块之间的变量无法互相访问

        4.推荐使用let或const

      全局作用域 全局作用域中声明的变量,任何作用域都能被访问

      1. 为window对象动态添加的属性默认也是全局的,不推荐!

      2. 函数中未使用任何关键字声明的变量为全局变量,不推荐!!

      3. 尽可能少的声明全局变量,防止全局变量被污染

      作用域链 作用域本质时底层的变量查找机制

      1. 在函数被执行时,会优先查找当前函数作用域中查找变量

      2. 如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域

       

      JS垃圾回收机制

      内存的生命周期 JS环境中分配的内存,一般有如下生命周期:

      1. 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存

      2. 内存使用:即读写内存,也就是使用变量、函数等

      3. 内存回收:使用完毕,由垃圾回收器自动回收不再使用的内存

      说明: 全局变量一般不会回收(关闭页面回收) 一般情况下局部变量的值,不用了,会被自动回收掉

      内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏

      闭包

      image-20240307204426551

      闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量

      变量提升:把所有var声明的变量提升到当前作用域的最前,只提升声明,不提升赋值

      函数参数

      动态参数arguments

      例如,不知道用户要传入几个参数,不需要为函数添加参数,可以使用arguments获取所有函数输入的参数

      剩余参数

      不知道用户要传入几个参数时,可以用剩余参数

      剩余参数是一个真数组

      解构

      数组解构

      数组解构是将数组的单元值快速批量赋值给一系列变量的简介语法 语法:

      1. const [a1,a2,a3]=[1,2,3]

      2. 变量的顺序对应数组单元格位置依次进行赋值

      对象解构

       

      箭头函数

      目的:引入箭头函数可以更简短的写函数,并且不绑定this,箭头函数的语法比函数表达式更加简洁

      使用场景:箭头函数更适用于那些本来需要匿名函数的地方

      基本语法

      箭头函数参数

      箭头函数中没有arguments函数,有剩余参数

      箭头函数this

      深入对象

      创建对象的三种方式

      1. const a= {}

      2. const a= new object()

      3. 利用构造函数创建的对象

      构造函数

      构造函数是一种特殊的函数,主要用于初始化对象

      场景:可以通过构造函数快速创建多个类似的对象

      技术上的约定:

      满足这两个条件认为是构造函数

       

      内置构造函数

      实例成员&静态成员

      实例成员:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员

      静态成员:构造函数中的属性和方法称为静态成员

      原型对象prototype

      构造函数虽然好用,但存在浪费内存的问题

      原型

      constructor属性

      作用:该属性指向该原型对象的构造函数image-20240310201854311

      当以对象形式追加函数时,需要使用constructor属性重新指回构造函数

      对象原型

      对象都有一个__photo__属性,指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就因为有__photo__原型的存在

      注意:

      原型继承

       

      原型链

      参考文档。。。

      高阶技巧

      深浅拷贝

      浅拷贝和深拷贝只针对引用类型

       

      浅拷贝

      常用方法:

      1. 拷贝对象:Object.assgin(新对象,老对象) 或{...obj}

      2. 拷贝数组:array.prototype.concat() 或 [...arr]

      深拷贝

      深拷贝:拷贝的是对象,不是地址

      常用方法:

      1. 通过递归实现深拷贝

      2. lodash/cloneDeep

      3. 通过JSON.stringfy()实现

       

      简单理解:函数内部自己调用自己,这个函数就是递归函数递归函数的作用和循环效果类似

      由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件 return

      通过for循环将旧对象的参数取出放入新的对象中

      异常处理

      处理this

      性能优化