B站视频对应链接

首推这个老师的JavaScript课程,讲的很棒!!!!

文章目录

    • 首推这个老师的JavaScript课程,讲的很棒!!!!
  • JavaScript (最全)基础+项目
    • 前言
      • 1.计算机语言
      • 2.分类
    • 一. JavaScript基础
      • 1. JavaScript发展历史(JS)
      • 2. JavaScript的组成
      • 3 . JavaScript能干什么
      • 4. JavaScript代码的书写位置
        • 4-1 行内式 JS 代码(不推荐)
        • 4-2 内嵌式 JS 代码
        • 4-3 外链式 JS 代码(推荐)
      • 5. JS 中的注释
        • 5-1 单行注释
        • 5-2 多行注释
      • 6. 变量(重点)
        • 6-1 定义变量及赋值
        • 6-2 变量的命名规则和命名规范
        • 6-3 数据类型(重点)
      • 7. 数据类型转换
        • 7.1 其他数据类型转成数值
        • 7.2 其他数据类型转成字符串
        • 7.3 其他数据类型转成布尔
      • 8. 运算符
        • 8-1 数学运算符
        • 8-2 赋值运算符
        • 8-3 比较运算符
        • 8-4 逻辑运算符
        • 8-5 自增自减运算符
      • 9. 三元运算符
      • 10. 分支结构
        • 10-1 IF 条件分支结构(重点)
        • 10-2 SWITCH 条件分支结构(重点)
      • 11. 循环结构(重点)
        • 11-1 WHILE 循环
        • 11-2 DO WHILE 循环
        • 11-3 FOR 循环
        • 11-4 BREAK 终止循环
        • 11-5 CONTINUE 结束本次循环
      • 12 函数的概念
        • 12-1 函数定义阶段
        • 12-2 函数调用阶段
        • 12-3 调用上的区别
        • 12-4 函数的参数
        • 12-5 函数的return
        • 12-6 预解析(重点)
        • 12-7 作用域
        • 12-8 变量使用规则
      • 13. 对象
        • 13-1 创建对象
        • 13-2 数据类型之间存储的区别
      • 14. 数组
        • 14-1 创建一个数组
        • 14-2 数组的 length
        • 14-3 数组的索引
        • 14-4 数组的排序
        • 14-5 数组的常用方法
      • 15 字符串
        • 15-1 创建字符串
        • 15-2 字符集
        • 15-3 字符串的常用方法
      • 16 Math
        • 16-1 random
        • 16-2 round
        • 16-3 abs
        • 16-4 ceil
        • 16-5 floor
        • 16-6 max
        • 16-7 min
        • 16-8 PI
      • 17 Date
        • 17-1 new Date()
        • 17-2 将日期字符串格式化成指定内容
      • 18 定时器
        • 18-1 倒计时定时器
        • 18-2 间隔定时器
        • 18-3 定时器的返回值
        • 18-4 关闭定时器
    • 二 BOM
      • 1. 获取浏览器窗口的尺寸
      • 2. 浏览器的弹出层
      • 3. 浏览器的地址信息
        • location.href
        • location.reload
      • 4. 浏览器的历史记录
        • history.back
        • history.forword
      • 5. 浏览器的 onload 事件
        • 5-1 在 html 页面中把 js 写在 head 里面
        • 5-2 在 html 页面中把 js 写在 body 最后面
      • 6. 浏览器的 onscroll 事件
      • 7. 浏览器滚动的距离
        • scrollTop
        • scrollLeft
      • 8. 本地存储
        • 8-1 localStorage
        • 8-2 sessionStorage
    • 三. DOM
      • 1. 获取一个元素
        • 1-1 getElementById
        • 1-2 getElementsByClassName
        • 1-3 getElementsByTagName
        • 1-4 querySelector
        • 1-5 querySelectorAll
      • 2. 操作属性
        • 2-1 innerHTML
        • 2-2 innerText
        • 2-3 getAttribute
        • 2-4 setAttribute
        • 2-5 removeAttribute
        • 2-6 style
        • 2-7 获取元素的非行间样式
        • 2-8 className
      • 3. DOM节点
        • 3-1 元素节点
        • 3-2 属性节点
        • 3-3 文本节点
        • 3-4 获取节点
      • 4. 节点属性
        • nodeType
        • nodeName
        • nodeValue
        • 汇总
      • 5. 操作 DOM 节点
        • 创建一个节点
        • 向页面中加入一个节点
        • 删除页面中的某一个节点
        • 修改页面中的某一个节点
      • 6. 获取元素的偏移量
        • offsetParent
        • offsetLeft 和 offsetTop
      • 7. 获取元素尺寸
        • offsetWith 和 offsetHeight
        • clientWidth 和 clientHeight
      • 8. 获取浏览器窗口尺寸
      • 9. 事件
      • 10 事件的绑定方式
      • 11. 常见的事件
        • 浏览器事件
        • 鼠标事件
        • 键盘事件
        • 表单事件
        • 触摸事件
      • 12. 事件对象
        • 点击事件的光标坐标点获取
      • 13. 事件的传播
        • 冒泡、捕获、目标
      • 14. 事件委托
        • 事件触发
        • target
        • 委托
      • 15. 默认行为
        • 阻止默认行为
      • 16. this 关键字
        • call
        • apply
        • bind
    • 四. ES6
      • let 和 const 关键字
      • 箭头函数
        • 箭头函数的特殊性
      • 函数传递参数的时候的默认值
      • 解构赋值
        • 解构对象
        • 解构数组
        • 注意
      • 模版字符串
      • 展开运算符
    • 五.面向对象
      • 创建对象的方式
        • 调用系统内置的构造函数创建对象
        • 字面量的方式创建一个对象
        • 使用工厂函数的方式创建对象
        • 使用自定义构造函数创建对象
      • 构造函数详解
        • 构造函数的基本使用
        • 使用构造函数创建一个对象
      • 原型
        • prototype
        • \_\_proto\_\_
      • 原型链
        • 一个对象所属的构造函数
        • constructor
        • 链状结构
        • 原型链的访问原则
        • 对象的赋值
      • 继承
        • 构造函数继承
        • 原型继承
        • 组合继承
    • 六. AJAX
      • AJAX 的优势
      • AJAX 的使用
        • 创建一个 ajax 对象
        • 配置链接信息
        • 发送请求
        • 一个基本的 ajax 请求
        • ajax 状态码
        • readyStateChange
        • responseText
      • 使用 ajax 发送请求时携带参数
        • 发送一个带有参数的 get 请求
        • 发送一个带有参数的 post 请求
      • 封装ajax
      • Promise
        • 回调地狱
        • PROMISE
      • ASYNC/AWAIT
      • fetch
      • cookie
      • jsonp
    • 七. jQuery
      • 1. jQuery 的使用
      • 2.选择器和筛选器
        • 2-1选择器
        • 2-2特殊选择器
        • 2-3筛选器
      • 3.属性操作
      • 4.操作元素的类名
      • 5. 操作元素的内容
      • 6. 操作样式
      • 7. 元素尺寸
      • 8. 元素位置
      • 9. 元素事件
      • 10.动画
      • 11. 元素操作
      • 12. 发送 ajax 请求
      • 13. 全局 ajax 函数
        • ajaxStart
        • ajaxSend
        • ajaxSuccess
        • ajaxError
        • ajaxComplete
        • ajaxStop
      • 14.jQuery 的多库共存
      • 15 . JQuery 的插件扩展
        • 扩展给他自己本身
        • 扩展给元素集
    • 八. swiper
    • 九. BootStrap
    • 十. Sass
      • 变量
      • 嵌套
        • 嵌套中的 &
        • 群组嵌套
      • 混入
        • 混合器传参
        • 参数默认值
      • 继承
      • 导入文件

JavaScript (最全)基础+项目

​ 作者:kerwin

​ 版本:QF1.0

​ 版权:千锋HTML5大前端教研院

​ 公众号: 大前端私房菜

前言

1.计算机语言

计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。

2.分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-01CsIAwr-1658883172753)(%E7%AC%94%E8%AE%B0.assets/image-20220510141952652.png)]

一. JavaScript基础

1. JavaScript发展历史(JS)
1. 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版,这是世界上第一款比较成熟的网络浏览器,轰动一时。但是这是一款名副其实的浏览器--只能浏览页面,浏览器无法与用户互动,当时解决这个问题有两个办法,一个是采用现有的语言,许它们直接嵌入网页。另一个是发明一种全新的语言。liveScript ==> javaScript ==> ECMAscript2. 1995年Sun公司将Oak语言改名为Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运   行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。3. 网景公司动了心,决定与Sun公司结成联盟4. 34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他,他只用10天时间就把Javascript设计出来了。5.(1)借鉴C语言的基本语法(2)借鉴Java语言的数据类型和内存管理(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位(4)借鉴Self语言,使用基于原型(prototype)的继承机制
2. JavaScript的组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AIUkdXpL-1658883172754)(%E7%AC%94%E8%AE%B0.assets/image-20220510144904468.png)]

1. ECMASCRIPT: 定义了javascript的语法规范,描述了语言的基本语法和数据类型
2. BOM (Browser Object Model): 浏览器对象模型- 有一套成熟的可以操作浏览器的 API,通过 BOM 可以操作浏览器。比如: 弹出框、浏览器跳转、获取分辨率等
3. DOM (Document Object Model): 文档对象模型- 有一套成熟的可以操作页面元素的 API,通过 DOM 可以操作页面中的元素。比如: 增加个 div,减少个 div,给 div 换个位置等

总结: JS 就是通过固定的语法去操作 浏览器 和 标签结构 来实现网页上的各种效果

3 . JavaScript能干什么
1. 常见的网页效果【表单验证,轮播图。。。】
2. 与H5配合实现游戏【水果忍者: http://www.jq22.com/demo/html5-fruit-ninja/】
3. 实现应用级别的程序【http://naotu.baidu.com】
4. 实现图表统计效果【https://echarts.apache.org/examples/zh/】
5. js可以实现人工智能【面部识别】
6. 后端开发,app开发,桌面端开发......
4. JavaScript代码的书写位置
  • css 一样,我们的 js 也可以有多种方式书写在页面上让其生效
  • js 也有多种方式书写,分为 行内式内嵌式外链式
4-1 行内式 JS 代码(不推荐)
  • 写在标签上的 js 代码需要依靠事件(行为)来触发
<!-- 写在 a 标签的 href 属性上 -->
<a href="javascript:alert('我是一个弹出层');">点击一下试试</a><!-- 写在其他元素上 -->
<div onclick="alert('我是一个弹出层')">点一下试试看</div><!--注:onclick 是一个事件(点击事件),当点击元素的时候执行后面的 js 代码
-->
4-2 内嵌式 JS 代码
  • 内嵌式的 js 代码会在页面打开的时候直接触发
<!-- 在 html 页面书写一个 script 标签,标签内部书写 js 代码 -->
<script type="text/javascript">alert('我是一个弹出层')
</script><!--注:script 标签可以放在 head 里面也可以放在 body 里面
-->
4-3 外链式 JS 代码(推荐)
  • 外链式 js 代码只要引入了 html 页面,就会在页面打开的时候直接触发
  • 新建一个 .js 后缀的文件,在文件内书写 js 代码,把写好的 js 文件引入 html 页面
// 我是 index.js 文件
alert('我是一个弹出层')
<!-- 我是一个 html 文件 --><!-- 通过 script 标签的 src 属性,把写好的 js 文件引入页面 -->
<script src="index.js"></script><!-- 一个页面可以引入多个 js 文件 -->
<script src="index1.js"></script>
<script src="index2.js"></script>
<script src="index3.js"></script>
5. JS 中的注释
  • 学习一个语言,先学习一个语言的注释,因为注释是给我们自己看的,也是给开发人员看的
  • 写好一个注释,有利于我们以后阅读代码
5-1 单行注释
  • 一般就是用来描述下面一行代码的作用
  • 可以直接写两个 / ,也可以按 ctrl + /
// 我是一个单行注释// 下面代码表示在浏览器里面出现一个弹出层
alert('我是一个弹出层')
5-2 多行注释
  • 一般用来写一大段话,或者注释一段代码
  • 可以直接写 /**/ 然后在两个星号中间写注释
    • 各个编辑器的快捷键不一样,vscodealt + shift + a
/*我是一个多行注释
*//*注释的代码不会执行alert('我是一个弹出层')alert('我是一个弹出层')
*/
alert('我是一个弹出层')
6. 变量(重点)
  • 变量指的是在程序中保存数据的一个容器
  • 变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据
  • 也就是说,我们向内存中存储了一个数据,然后要给这个数据起一个名字,为了是我们以后再次找到他
  • 语法: var 变量名 = 值
6-1 定义变量及赋值
// 定义一个变量
var num;// 给一个变量赋值
num = 100;// 定义一个变量的同时给其赋值
var num2 = 200;
  • 注意:

    1. 一个变量名只能存储一个值
    2. 当再次给一个变量赋值的时候,前面一次的值就没有了
    3. 变量名称区分大小写(JS 严格区分大小写)
6-2 变量的命名规则和命名规范
  • 规则: 必须遵守的,不遵守就是错

    1. 一个变量名称可以由 数字字母英文下划线(_)美元符号($) 组成
    2. 严格区分大小写
    3. 不能由数字开头
    4. 不能是 保留字 或者 关键字
    5. 不要出现空格
  • 规范: 建议遵守的(开发者默认),不遵守不会报错

    1. 变量名尽量有意义(语义化)
    2. 遵循驼峰命名规则,由多个单词组成的时候,从第二个单词开始首字母大写
    3. 不要使用中文
6-3 数据类型(重点)
  • 是指我们存储在内存中的数据的类型
  • 我们通常分为两大类 基本数据类型复杂数据类型

基本数据类型

  1. 数值类型(number)

    • 一切数字都是数值类型(包括二进制,十进制,十六进制等)
    • NaN(not a number),一个非数字
  2. 字符串类型(string)
    • 被引号包裹的所有内容(可以是单引号也可以是双引号)
  3. 布尔类型(boolean)
    • 只有两个(true 或者 false
  4. null类型(null)
    • 只有一个,就是 null,表示空的意思
  5. undefined类型(undefined)
    • 只有一个,就是 undefined,表示没有值的意思

判断数据类型

  • 既然已经把数据分开了类型,那么我们就要知道我们存储的数据是一个什么类型的数据
  • 使用 typeof 关键字来进行判断
// 第一种使用方式
var n1 = 100;
console.log(typeof n1);// 第二种使用方式
var s1 = 'abcdefg';
console.log(typeof(s1));
7. 数据类型转换
  • 数据类型之间的转换,比如数字转成字符串,字符串转成布尔,布尔转成数字等
7.1 其他数据类型转成数值
  1. Number(变量)

    可以把一个变量强制转换成数值类型

    可以转换小数,会保留小数

    可以转换布尔值

    遇到不可转换的都会返回 NaN

  2. parseInt(变量)

    从第一位开始检查,是数字就转换,知道一个不是数字的内容

    开头就不是数字,那么直接返回 NaN

    不认识小数点,只能保留整数

  3. parseFloat(变量)

    从第一位开始检查,是数字就转换,知道一个不是数字的内容

    开头就不是数字,那么直接返回 NaN

    认识一次小数点

  4. 除了加法以外的数学运算

    运算符两边都是可运算数字才行

    如果运算符任何一遍不是一个可运算数字,那么就会返回 NaN

    加法不可以用

7.2 其他数据类型转成字符串
  1. 变量.toString()

    有一些数据类型不能使用 toString() 方法,比如 undefinednull

  2. String(变量)

    所有数据类型都可以

  3. 使用加法运算

    在 JS 里面,+ 由两个含义

    字符串拼接: 只要 + 任意一边是字符串,就会进行字符串拼接

    加法运算:只有 + 两边都是数字的时候,才会进行数学运算

7.3 其他数据类型转成布尔
  1. Boolean(变量)

    在 js 中,只有 ''0nullundefinedNaN,这些是 false

    其余都是 true

8. 运算符
  • 就是在代码里面进行运算的时候使用的符号,不光只是数学运算,我们在 js 里面还有很多的运算方式
8-1 数学运算符
  1. +

    只有符号两边都是数字的时候才会进行加法运算

    只要符号任意一边是字符串类型,就会进行字符串拼接

  2. -

    会执行减法运算

    会自动把两边都转换成数字进行运算

  3. *

    会执行乘法运算

    会自动把两边都转换成数字进行运算

  4. /

    会执行除法运算

    会自动把两边都转换成数字进行运算

  5. %

    会执行取余运算

    会自动把两边都转换成数字进行运算

8-2 赋值运算符
  1. =

    就是把 = 右边的赋值给等号左边的变量名

    var num = 100

    就是把 100 赋值给 num 变量

    那么 num 变量的值就是 100

  2. +=

    var a = 10;
    a += 10;
    console.log(a); //=> 20
    

    a += 10 等价于 a = a + 10

  3. -=

    var a = 10;

    a -= 10;
    console.log(a); //=> 0
    

    a -= 10 等价于 a = a - 10

  4. *=

    var a = 10;
    a *= 10;
    console.log(a); //=> 100
    

    a *= 10 等价于 a = a * 10

  5. /+

    var a = 10;
    a /= 10;
    console.log(a); //=> 1
    

    a /= 10 等价于 a = a / 10

  6. %=

    var a = 10;
    a %= 10;
    console.log(a); //=> 0
    

    a %= 10 等价于 a = a % 10

8-3 比较运算符
  1. ==

    • 比较符号两边的值是否相等,不管数据类型

      1 == '1'

      两个的值是一样的,所以得到 true

  2. ===

    • 比较符号两边的值和数据类型是否都相等

      1 === '1'

      两个值虽然一样,但是因为数据类型不一样,所以得到 false

  3. !=

    • 比较符号两边的值是否不等

      1 != '1'

      因为两边的值是相等的,所以比较他们不等的时候得到 false

  4. !==

    • 比较符号两边的数据类型和值是否不等

      1 !== '1'

      因为两边的数据类型确实不一样,所以得到 true

  5. >=

    • 比较左边的值是否 大于或等于 右边的值

      1 >= 1 结果是 true

      1 >= 0 结果是 true

      1 >= 2 结果是 false

  6. <=

    • 比较左边的值是否 小于或等于 右边的值

      1 <= 2 结果是 true

      1 <= 1 结果是 true

      1 <= 0 结果是 false

  7. >

    • 比较左边的值是否 大于 右边的值

      1 > 0 结果是 true

      1 > 1 结果是 false

      1 > 2 结果是 false

  8. <

    • 比较左边的值是否 小于 右边的值

      1 < 2 结果是 true

      1 < 1 结果是 false

      1 < 0 结果是 false

8-4 逻辑运算符
  1. &&

    • 进行 且 的运算

      符号左边必须为 true 并且右边也是 true,才会返回 true

      只要有一边不是 true,那么就会返回 false

      true && true 结果是 true

      true && false 结果是 false

      false && true 结果是 false

      false && false 结果是 false

  2. ||

    • 进行 或 的运算

      符号的左边为 true 或者右边为 true,都会返回 true

      只有两边都是 false 的时候才会返回 false

      true || true 结果是 true

      true || false 结果是 true

      false || true 结果是 true

      false || false 结果是 false

  3. !

    • 进行 取反 运算

      本身是 true 的,会变成 false

      本身是 false 的,会变成 true

      !true 结果是 false

      !false 结果是 true

8-5 自增自减运算符
  1. ++

    • 进行自增运算

    • 分成两种,前置++后置++

    • 前置++,会先把值自动 +1,在返回

      var a = 10;
      console.log(++a);
      // 会返回 11,并且把 a 的值变成 11
      
    • 后置++,会先把值返回,在自动+1

      var a = 10;
      console.log(a++);
      // 会返回 10,然后把 a 的值变成 11
      
  2. --

    • 进行自减运算
    • 分成两种,前置–后置–
    • ++ 运算符道理一样
9. 三元运算符
  • 三元运算,就是用 两个符号 组成一个语句

  • 语法: 条件 ? 条件为 true 的时候执行 : 条件为 false 的时候执行

    var age = 18;
    age >= 18 ? alert('已经成年') : alert('没有成年')
    
10. 分支结构
  • 我们的 js 代码都是顺序执行的(从上到下)
  • 逻辑分支就是根据我们设定好的条件来决定要不要执行某些代码
10-1 IF 条件分支结构(重点)

if 语句

  • 通过一个 if 语句来决定代码是否执行

  • 语法: if (条件) { 要执行的代码 }

  • 通过 () 里面的条件是否成立来决定 {} 里面的代码是否执行

    // 条件为 true 的时候执行 {} 里面的代码
    if (true) {alert('因为条件是 true,我会执行')
    }// 条件为 false 的时候不执行 {} 里面的代码
    if (false) {alert('因为条件是 false,我不会执行')
    }
    

if else 语句

  • 通过 if 条件来决定,执行哪一个 {} 里面的代码

  • 语法: if (条件) { 条件为 true 的时候执行 } else { 条件为 false 的时候执行 }

  • 两个 {} 内的代码一定有一个会执行

    // 条件为 true 的时候,会执行 if 后面的 {}
    if (true) {alert('因为条件是 true,我会执行')
    } else {alert('因为条件是 true,我不会执行')
    }// 条件为 false 的时候,会执行 else 后面的 {}
    if (false) {alert('因为条件为 false,我不会执行')
    } else {alert('因为条件为 false,我会执行')
    }
    

if else if … 语句

  • 可以通过 ifelse if 来设置多个条件进行判断

  • 语法:if (条件1) { 条件1为 true 的时候执行 } else if (条件2) { 条件2为 true 的时候执行 }

  • 会从头开始依次判断条件

    • 如果第一个条件为 true 了,那么就会执行后面的 {} 里面的内容
    • 如果第一个条件为 false,那么就会判断第二个条件,依次类推
  • 多个 {} ,只会有一个被执行,一旦有一个条件为 true 了,后面的就不在判断了

    // 第一个条件为 true,第二个条件为 false,最终会打印 “我是代码段1”
    if (true) {alert('我是代码段1')
    } else if (false) {alert('我是代码段2')
    }// 第一个条件为 true,第二个条件为 true,最终会打印 “我是代码段1”
    // 因为只要前面有一个条件满足了,就不会继续判断了
    if (true) {alert('我是代码段1')
    } else if (true) {alert('我是代码段2')
    }// 第一个条件为 false,第二个条件为 true,最终会打印 “我是代码段2”
    // 只有前一个条件为 false 的时候才会继续向后判断
    if (false) {alert('我是代码段1')
    } else if (true) {alert('我是代码段2')
    }// 第一个条件为 false,第二个条件为 false,最终什么也不会发生
    // 因为当所有条件都为 false 的时候,两个 {} 里面的代码都不会执行
    if (false) {alert('我是代码段1')
    } else if (false) {alert('我是代码段2')
    }
    

if else if … else 语句

  • 和之前的 if else if ... 基本一致,只不过是在所有条件都不满足的时候,执行最后 else 后面的 {}

    // 第一个条件为 false,第二个条件为 false,最终会打印 “我是代码段3”
    // 只有前面所有的条件都不满足的时候会执行 else 后面的 {} 里面的代码
    // 只要前面有一个条件满足了,那么后面的就都不会执行了
    if (false) {alert('我是代码段1')
    } else if (false) {alert('我是代码段2')
    } else {alert('我是代码段3')
    }
    
10-2 SWITCH 条件分支结构(重点)