diff --git "a/\351\231\210\346\200\235\345\223\262/20251110.md" "b/\351\231\210\346\200\235\345\223\262/20251110.md"
new file mode 100644
index 0000000000000000000000000000000000000000..2b916d54f15eb4f2f9e2a725f4aaca861610295d
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251110.md"
@@ -0,0 +1,31 @@
+## 认识script
+1. script(三种排列方式)
+- 放在body里最下面(原因:网页先构建后渲染)
+- 放在标签内(相当于行内样式)
+- 放在外部js文件内(需要引用)
+2. 代码
+- script(js祖师爷)
+
+- alert(弹窗)
+
+- function(可重复使用的代码块)
+
+- onclick(事件处理方法)
+
+## 作业
+
+```html
+
+```
+- 效果图
+ - 
+
+### 输出明日学院的官网地址
+- 代码
+ - ```js
+
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251112.md" "b/\351\231\210\346\200\235\345\223\262/20251112.md"
new file mode 100644
index 0000000000000000000000000000000000000000..a6d975a14540c3eaa1a66922782156af1f3b63c9
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251112.md"
@@ -0,0 +1,131 @@
+## 数据类型
+
+### 基本数据类型
+ - 数值型 number
+ - 十进制
+ - 十六进制
+ - 八进制
+ - 浮点型数据
+ - 传统记数法
+ - 1.23
+ - 科学计数法
+ - 123e-3
+ - infinity 无穷
+ - NaN 非数值
+ - 字符串型 string
+ - 单引号
+ - 双引号
+ - 反引号
+ - 转义字符
+ | 转义字符 | 描述 | 转义字符 | 描述 |
+ | -------- | ------------------ | -------- | ------------------------- |
+ | \b | 退格 | \v | 垂直制表符 |
+ | \n | 换行符 | \r | Enter符 |
+ | \t | 水平制表符,Tab空格 | `\\` | 反斜杠 |
+ | \f | 换页 | \OOO | 八进制整数,范围为000~777 |
+ | \' | 单引号 | \xHH | 十六进制整数,范围为00~FF |
+ | \" | 双引号 | \uhhhh | 十六进制编码的Unicode字符 |
+ - 要将其放在`
`格式化文本中才会起作用
+ - 字符串拼接
+ - 布尔值 boolean
+ - true
+ - false
+ - 空值 null
+ - 空的或者不存在的值
+ - 未定义值 undefined
+ - 变量还没有赋值
+
+## 常量和变量
+ - 常量
+ - const
+ - 变量
+ - var
+ - let
+ - 变量命名规则
+ - 以字母、下划线、$开头
+ - 不能使用关键字
+ - 区分大小写
+ - 不能使用中文
+ - 不能使用特殊字符
+ - 不能使用数字开头
+
+## 运算符
+
+- 算术运算符
+ - `+ - * / % ++ --`
+ - 优先级
+ - `() -> ** -> * / % -> + - -> ++ --`
+ - 从左到右
+ - 优先级相同,从左到右
+ - () 优先级最高
+- 字符串运算符
+ - `+` 连接两个字符
+ - `+=` 连接两个字符并赋值
+- 比较运算符
+ - `== != > < >= <=`
+ - `==` 比较值是否相等
+ - `===` 比较值和类型是否相等
+ - `!=` 比较值是否不相等
+ - `!==` 比较值和类型是否不相等
+ - `> < >= <=` 比较大小
+- 赋值运算符
+ - `=`
+ - `+=`
+ - `-=`
+ - `*=`
+ - `/=`
+ - `%=`
+
+## 作业
+
+```html
+
+
+
+
+ Document
+
+
+
+
+
+
+```
+
+
diff --git "a/\351\231\210\346\200\235\345\223\262/20251113.md" "b/\351\231\210\346\200\235\345\223\262/20251113.md"
new file mode 100644
index 0000000000000000000000000000000000000000..690a64c09f74733ac8ce115d426396ab938284f9
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251113.md"
@@ -0,0 +1,151 @@
+## 逻辑运算符
+ - 逻辑与 &&
+ - 两个都为真则为真
+ - 逻辑或 ||
+ - 其中有一个为真则为真
+ - 逻辑非 !
+ - !true
+
+## 条件运算符
+ - 语法
+ - `条件 ? 表达式1 : 表达式2`
+ - 如果条件为真,则执行表达式1,否则执行表达式2
+
+## 其他运算符
+- 逗号运算符
+ - `a = 1, b = 2`
+ - 则结果为最后一个
+- typeof 运算符
+ - 判断数据类型
+ | 数据类型 | 返回值 | 数据类型 | 返回值 |
+ | --------- | --------- | -------- | -------- |
+ | 数值 | number | null | objec |
+ | 字符串 | string | 对象 | object |
+ | 布尔值 | object | 函数 | function |
+ | undefined | undefined | ----- | ---- |
+- new运算符
+ - 对象实例名称=new 对象类型(参数)
+ - 对象实例名称=new 对象类型
+
+## 表达式
+- 算术表达式
+
+- 逻辑表达式
+
+- 字符串表达式
+
+## 作业
+
+```html
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+```
+
+
diff --git "a/\351\231\210\346\200\235\345\223\262/20251114.md" "b/\351\231\210\346\200\235\345\223\262/20251114.md"
new file mode 100644
index 0000000000000000000000000000000000000000..73bdf4c09d00af8a08ad08b677ebe06318947c8f
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251114.md"
@@ -0,0 +1,133 @@
+## 作业
+```html
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+
+```
+
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251117.md" "b/\351\231\210\346\200\235\345\223\262/20251117.md"
new file mode 100644
index 0000000000000000000000000000000000000000..c5446b862a26815b31896586384dbdd05c693a3b
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251117.md"
@@ -0,0 +1,135 @@
+57-62
+# 笔记
+
+## 函数的定义
+- 定义函数的基本语法
+ - ```
+ function 函数名(参数){
+ 语句;
+ return 返回值;
+ }
+ ```
+- 函数的调用
+ - 简单调用
+ - 函数名(参数)
+ - 响应中调用
+ - 放在onclick事件中
+ - 通过超链接
+ - href="JavaScript:函数()";
+
+- 函数的参数
+ - 实参
+ - 形参
+
+- 函数的返回值
+ - 有return
+ - 无return
+ - 会返回undefined
+
+## 作业
+
+### 获取完整的收货地址
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 获取数字的绝对值
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 斐波那契数列
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 判断是否可以享受优惠活动
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 判断考生成绩是否到达本科分数线
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251119.md" "b/\351\231\210\346\200\235\345\223\262/20251119.md"
new file mode 100644
index 0000000000000000000000000000000000000000..c957986836ccdff8e5d9274ef63bd59016200e75
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251119.md"
@@ -0,0 +1,240 @@
+63-73
+# 笔记
+
+## 递归函数
+- 需要两个必要函数
+ - 结束递归的条件
+ - 递归调用语句
+
+## 内置对象
+- parselnt
+ - 首位为数字的字符串转化成数字
+- parseFloat
+ - 首位为数字的字符串转化成浮点型
+- isNaN
+ - 检验是否为NaN
+ - 返回true 或 false
+- isFinite
+ - 检验是否有限
+ - 返回true 或 false
+
+## 字符串处理函数
+- eval
+ - eval("5+7")
+ - 计算字符串表达式
+- encodeUrl
+ - 对URL进行编码
+- decodeUrl
+ - 对URl进行解码
+
+## 匿名函数
+- 语法
+ - ```
+ function(参数){
+ 语句
+ 返回值
+ }
+ ```
+
+## 对象的概念
+- 一个贴了标签的收纳盒
+- 包含两个要素
+ - 方法
+ - 属性
+
+## 对象的增删改查
+- 对象的创建
+ - let 对象名 ={属性名:属性值}
+- 对象的删除
+ - delate 对象名.属性名
+- 对象的修改
+ - 对象名.修改属性名=属性值
+- 对象的添加
+ - 对象名['属性名']=属性值
+ - 对象名.属性名=属性值
+
+## 作业
+
+### 比较两个数字的大小
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 获取3个数字中的最小值
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 判断登录是否成功
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 获取1000以内能同时被3和5整除的正整数
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 判断20岁处在哪个年龄段
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 输出某年某月的天数
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
diff --git "a/\351\231\210\346\200\235\345\223\262/20251120.md" "b/\351\231\210\346\200\235\345\223\262/20251120.md"
new file mode 100644
index 0000000000000000000000000000000000000000..3525c832d0c755eb3125880b0c819821ba11da1b
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251120.md"
@@ -0,0 +1,92 @@
+# 笔记
+
+## 遍历对象
+- 语法
+ - ```
+ for(let key in 对象名){
+ 对象名[key]
+ }
+ ```
+
+## 内部对象
+- Math
+ - 使用
+ - Math.方法属性
+ - .abs() 绝对值
+ - .ceil() 向上取整
+ - .floor() 向下取整
+ - .max() 最大
+ - .min() 最小
+ - .round() 四舍五入
+
+- Date
+ - 创建
+ - let 名=new Date()
+ -
+ | 方法名称 | 语法示例 | 功能描述 | 返回值类型 | 备注 |
+ | -------------------- | --------------------------------- | -------------------------------------------------------------------------------- | ---------- | -------------------------- |
+ | getFullYear() | new Date().getFullYear() | 获取年份(4位数字,如2024) | Number | 区别于 getYear()(已弃用) |
+ | getMonth() | new Date().getMonth() | 获取月份(0-11,0代表1月,11代表12月) | Number | 使用时需+1得到实际月份 |
+ | getDate() | new Date().getDate() | 获取当月日期(1-31) | Number | 注意与 getDay() 区分 |
+ | getDay() | new Date().getDay() | 获取星期几(0-6,0代表周日,6代表周六) | Number | 非“当月第几天” |
+ | getHours() | new Date().getHours() | 获取小时数(0-23,24小时制) | Number | 24小时制无上午/下午区分 |
+ | getMinutes() | new Date().getMinutes() | 获取分钟数(0-59) | Number | - |
+ | getSeconds() | new Date().getSeconds() | 获取秒数(0-59) | Number | - |
+ | getMilliseconds() | new Date().getMilliseconds() | 获取毫秒数(0-999) | Number | 用于高精度时间计算 |
+ | getTime() | new Date().getTime() | 获取从1970-01-01 00:00:00 UTC到当前时间的毫秒数(时间戳) | Number | 常用于时间比较和排序 |
+ | toLocaleDateString() | new Date().toLocaleDateString() | 按本地格式返回日期字符串(如“2024/5/20”或“2024-05-20”) | String | 格式因系统区域设置而异 |
+ | toLocaleTimeString() | new Date().toLocaleTimeString() | 按本地格式返回时间字符串(如“14:30:25”或“下午2:30:25”) | String | 包含时分秒,区域自适应 |
+ | toLocaleString() | new Date().toLocaleString() | 按本地格式返回日期+时间字符串(如“2024/5/20 14:30:25”) | String | 最常用的本地格式化方法 |
+ | toString() | new Date().toString() | 返回完整的日期时间字符串(如“Mon May 20 2024 14:30:25 GMT+0800 (中国标准时间)”) | String | 包含时区信息,格式固定 |
+ | setFullYear() | new Date().setFullYear(2025) | 设置年份,可传入年、月、日参数(如setFullYear(2025, 4, 15)) | Number | 返回设置后的时间戳 |
+ | setMonth() | new Date().setMonth(5) | 设置月份(0-11),可额外传入日期参数(如setMonth(5, 20)) | Number | 月份参数需注意0起始 |
+ | setDate() | new Date().setDate(15) | 设置当月日期(1-31),超出范围会自动进位(如32日会转为下月1日) | Number | 支持日期自动调整 |
+ | setHours() | new Date().setHours(10) | 设置小时数(0-23),可额外传入分、秒、毫秒参数 | Number | 超出范围自动进位 |
+ | setMinutes() | new Date().setMinutes(45) | 设置分钟数(0-59),可额外传入秒、毫秒参数 | Number | - |
+ | setSeconds() | new Date().setSeconds(30) | 设置秒数(0-59),可额外传入毫秒参数 | Number | - |
+ | setMilliseconds() | new Date().setMilliseconds(500) | 设置毫秒数(0-999) | Number | - |
+ | setTime() | new Date().setTime(1716200000000) | 通过时间戳设置日期时间 | Number | 直接覆盖当前日期时间 |
+ | now() | Date.now() | 获取当前时间的时间戳(无需创建Date实例) | Number | 静态方法,性能更优 |
+ | parse() | Date.parse("2024-05-20") | 解析日期字符串为时间戳(格式支持“yyyy-MM-dd”“MM/dd/yyyy”等) | Number | 解析失败返回NaN |
+ | UTC() | Date.UTC(2024, 4, 20) | 按UTC时间创建日期并返回时间戳(月份0-11,日期1-31) | Number | 静态方法,忽略本地时区 |
+
+## 作业
+
+### 计算两个日期的间隔小时数
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 高考倒计时
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+## 转换时间格式
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251121.md" "b/\351\231\210\346\200\235\345\223\262/20251121.md"
new file mode 100644
index 0000000000000000000000000000000000000000..d695b93a9550eeaf94c1708d1ff21be46b931bc9
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251121.md"
@@ -0,0 +1,150 @@
+# 笔记
+
+## Event事件
+- 概念
+ - 定义
+ - 事件发生时,浏览器自动创建的对象,包含该事件的详细信息
+- 常用属性
+ - altKey
+ - 判断alt是否被按下
+ - ctrlKey
+ - 判断ctrl是否被按下
+ - shiftKey
+ - 判断shift是否被按下
+ - 以上三个都是布尔型
+ - true 按下
+ - false 未按下
+ - button
+ - 获取事件发生时用户按的鼠标键
+ - 0左 中1 2右
+ - clientX
+ - 获取鼠标指针在浏览器窗口的X坐标
+ - clientY
+ - 获取鼠标指针在浏览器窗口的Y坐标
+ - x
+ - 设置或获取鼠标指针位置相对于css属性中有position属性的上级元素的X轴坐标
+ - y
+ - 只读属性
+ - 设置或获取鼠标指针位置相对于css属性中有position属性的上级元素的Y轴坐标
+ - 以上x、y如果没有上级元素以body为参考
+ - canceBubble
+ - 可读写的布尔值看,默认false
+ - target
+ - 获取触发事件的对象
+ - 可以读、写该元素的属性,并调用该元素的任何方法
+
+## 数组
+- 数组的定义
+ - let 数组名=["das","sad","sda"];
+- 数组的输入
+ - 创建数组同时传入数据
+ - 数组名[下标]=数据
+ - 利用for循环输入数组数据
+- 数组的输出
+ - 用下标获取指定元素值
+ - 用for循环获取数组
+ - 用for循环全输出
+- 获取数组长度
+ - 数组名.length
+- 数组的方法
+ - concat
+ - 连接两个或更多数组,并返回结果
+ - pop
+ - 删除并返回数组的最后一个元素
+ - push
+ - 向数组的尾部添加一个或多个元素,并返回新的长度
+ - shift
+ - 删除并返回数组中的第一个元素
+ - splice
+ - 删除元素,并向数组中添加新元素
+ - unshift
+ - 向数组的头部添加一个或多个元素,并返回新的长度
+ - reverse
+ - 颠倒数组中元素的顺序
+ - sort
+ - 对数组中的元素进行排序
+ - slice
+ - 从某个已有的数组中返回选定的元素
+ - toSource
+ - 代表对象的源代码
+ - toString
+ - 把数组转换为字符串,并返回结果
+ - toLocaleString
+ - 把数组转换为本地字符串,并返回结果
+ - join
+ - 把数组中的所有元素放入一个字符串,元素间通过指定的分隔符进行分割
+ - value
+ - 返回数组对象的原始值
+
+## 作业
+
+### 判断单击的鼠标按键
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
+
+### 生成指定位数的1~6的随机数
+- 代码
+ - ```js
+
+ 请输入要生成随机数的位数:
+
+
+
+ ```
+- 效果图
+ - 
+
+### 计算从出生到现在度过的时间
+- 代码
+ - ```js
+
+ ```
+- 效果图
+ - 
diff --git "a/\351\231\210\346\200\235\345\223\262/20251124_Array,String.md" "b/\351\231\210\346\200\235\345\223\262/20251124_Array,String.md"
new file mode 100644
index 0000000000000000000000000000000000000000..f4b9eaa08b473d7ae801d3718f1571d72fb253ff
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251124_Array,String.md"
@@ -0,0 +1,210 @@
+# Array,String
+- concat
+```js
+arr.concat(arr1,arr2);//连接多个数组并返回结果
+```
+- pop
+```js
+arr.pop();//删除最后一个数组并返回结果
+```
+- push
+```js
+arr.push(1,2,3,4);//在数组后面添加数并返回结果
+```
+- shift
+```js
+arr.shift();//删除第一个数组并返回结果
+```
+- splice
+```js
+arr.splice(1,2,3,4);//删除最后一个数组并添加元素
+```
+- unshift
+```js
+arr.unshift(1,2,3,4);//在数组头部添加一到多个元素并返回结果
+```
+- reverse
+```js
+arr.reverse();//颠倒数组
+```
+- sort
+
+```js
+arr.sort();//数组排序
+```
+- slice
+
+```js
+arr.slice(0,3);//在数组中返回选定元素
+```
+- toSource
+```js
+arr.toSource();//输出源码
+```
+- toString
+```js
+arr.toString(1,2,3,4);//把数组转换为字符串,并返回结果
+```
+- toLocaleString
+```js
+arr.toLocaleString(1,2,3,4);//把数组转换为本地字符串,并返回结果
+```
+- join
+```js
+arr.join(",");//把数组用字符隔开,并返回结果
+```
+- valueOf
+```js
+arr.valueOf();//返回数组原始结果
+```
+- Map
+```js
+let map = new map(["key","value"],[...]);//字典[键/值]
+```
+
+# 作业
+```html
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+```
+
+
diff --git "a/\351\231\210\346\200\235\345\223\262/20251126_\346\255\243\345\210\231.md" "b/\351\231\210\346\200\235\345\223\262/20251126_\346\255\243\345\210\231.md"
new file mode 100644
index 0000000000000000000000000000000000000000..cdcd5ee62aa8f9efd71cd9721550f62d468e9fd2
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251126_\346\255\243\345\210\231.md"
@@ -0,0 +1,26 @@
+# 正则
+
+| 符号 | 含义 | 示例 | | |
+| ------- | -------------------------------------------------- | -------------------------------------- | ---- | ---------------- |
+| `.` | 匹配任意单个字符(除换行) | `a.b` 匹配 `acb`/`aab` | | |
+| `*` | 前一个字符匹配 0 次或多次 | `ab*` 匹配 `a`/`ab`/`abb` | | |
+| `+` | 前一个字符匹配 1 次或多次 | `ab+` 匹配 `ab`/`abb` | | |
+| `?` | 前一个字符匹配 0 次或 1 次 | `ab?` 匹配 `a`/`ab` | | |
+| `{n}` | 前一个字符匹配 n 次 | `a{3}` 匹配 `aaa` | | |
+| `{n,}` | 前一个字符匹配≥n 次 | `a{2,}` 匹配 `aa`/`aaa` | | |
+| `{n,m}` | 前一个字符匹配 n~m 次 | `a{1,3}` 匹配 `a`/`aa`/`aaa` | | |
+| `^` | 匹配字符串开头 | `^abc` 匹配 `abc123` | | |
+| `$` | 匹配字符串结尾 | `abc$` 匹配 `123abc` | | |
+| `[]` | 字符集(匹配任意一个) | `[abc]` 匹配 `a`/`b`/`c` | | |
+| `[^]` | 否定字符集(不匹配任意一个) | `[^abc]` 匹配 `d`/`1` | | |
+| ` | ` | 逻辑或(分隔多个模式) | `ab | cd`匹配`ab`/`cd` |
+| `()` | 分组(提取子匹配 / 改变优先级) | `(ab)+` 匹配 `ab`/`abab` | | |
+| `\` | 转义字符(匹配特殊符号) | `\.` 匹配 `.` | | |
+| `\d` | 匹配数字(等价于 [0-9]) | `\d{3}` 匹配 `123` | | |
+| `\D` | 匹配非数字(等价于 [^0-9]) | `\D` 匹配 `a`/`!` | | |
+| `\w` | 匹配字母 / 数字 / 下划线(等价于 [a-zA-Z0-9_]) | `\w+` 匹配 `user123` | | |
+| `\W` | 匹配非字母 / 数字 / 下划线(等价于 [^a-zA-Z0-9_]) | `\W` 匹配 `@`/ | | |
+| `\s` | 匹配空白字符(空格 / 制表符 / 换行等) | `a\sb` 匹配 `a b` | | |
+| `\S` | 匹配非空白字符 | `\S+` 匹配 `abc123` | | |
+| `\b` | 单词边界(区分单词与非单词) | `\bcat\b` 匹配 `cat` 不匹配 `category` | | |
+| `\B`| 非单词边界| `\Bcat\B` 匹配 `xcatz` 中的 `cat` | | |
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251127.md" "b/\351\231\210\346\200\235\345\223\262/20251127.md"
new file mode 100644
index 0000000000000000000000000000000000000000..c46be4dfb6198cc1304f7c9ea4d849d1ddb34893
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251127.md"
@@ -0,0 +1,153 @@
+## 笔记
+
+### try...catch...finally 语句
+
+```javascript
+try {
+ // 可能抛出异常的代码
+} catch (error) {
+ // 捕获异常并处理
+} finally {
+ // 无论是否有异常都执行
+}
+```
+
+#### try 块
+
+包含可能出错的代码。一旦其中代码抛出异常,程序立即跳转到 `catch` 块,`try` 块后续代码不再执行。
+
+#### 3. catch 块
+
+捕获 `try` 块抛出的异常。`catch` 的参数(常为 `error`)包含异常详细信息,如 `error.message` 为错误信息,`error.name` 是错误类型。
+
+#### 4. finally 块
+
+无论 `try` 块是否抛出异常,都会执行。常用于资源清理,如关闭数据库连接。
+
+### throw 语句
+
+- **作用**:手动抛出异常。当程序遇到不符合预期的条件时,可使用 `throw` 中断正常流程并抛出异常。
+
+```javascript
+function checkAge(age) {
+ if (age < 0) {
+ throw new Error('年龄不能为负数');
+ }
+ return `年龄是 ${age}`;
+}
+
+try {
+ let result = checkAge(-5);
+ console.log(result);
+} catch (error) {
+ console.log('捕获到异常:', error.message);
+}
+```
+
+## 作业
+
+### 第一部分
+
+#### 关键代码
+
+```html
+
+
+ 用户名:
+ 密 码:
+
+
+```
+
+#### 效果展示
+
+
+
+### 第二部分
+
+#### 关键代码
+
+```html
+
+
+```
+
+#### 效果展示
+
+
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251128.md" "b/\351\231\210\346\200\235\345\223\262/20251128.md"
new file mode 100644
index 0000000000000000000000000000000000000000..bc0c958983e8cac07fcc279fd6e6d8002e2df621
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251128.md"
@@ -0,0 +1,435 @@
+## 笔记
+
+# 事件对象(event/e)笔记
+
+## 一、通用属性与方法
+
+| 类别 | 属性 / 方法 | 白话解释 | 返回值 |
+| ------------ | ------------------- | ------------------------------------------------------------ | ------------------------------------------------- |
+| 找触发元素 | `target` | 实际触发事件的 DOM 元素。例如,点击列表中的 `li`,`target` 就是该 `li` 元素。 | 触发事件的 DOM 元素对象 |
+| 认事件类型 | `type` | 事件的名称,以字符串形式呈现,如 `focus`、`click`、`keydown` 等。 | 表示事件类型的字符串 |
+| 阻止默认行为 | `preventDefault()` | 用于取消浏览器的默认动作,比如回车刷新页面、链接跳转、右键菜单弹出等。 | 无返回值。该方法用于阻止浏览器的默认行为。 |
+| 阻止事件冒泡 | `stopPropagation()` | 防止事件向上冒泡到父元素,避免嵌套元素间的事件冲突。 | 无返回值。该方法用于阻止事件在 DOM 树中向上冒泡。 |
+
+### 找触发元素示例
+```javascript
+// 输入框获焦时添加红色边框
+const inputs = document.querySelectorAll('.txt');
+inputs.forEach(item => {
+ item.addEventListener('focus', (e) => {
+ e.target.style.border = '5px solid red';
+ });
+});
+```
+
+### 认事件类型示例
+```javascript
+// 一个函数处理多种事件
+function handleInput(e) {
+ if (e.type === 'focus') {
+ e.target.style.border = 'red';
+ } else if (e.type === 'blur') {
+ e.target.style.border = 'gray';
+ }
+}
+inputs.forEach(item => {
+ item.addEventListener('focus', handleInput);
+ item.addEventListener('blur', handleInput);
+});
+```
+
+### 阻止默认行为示例
+```javascript
+// 输入框按回车不刷新页面,并打印内容
+inputs[0].addEventListener('keydown', (e) => {
+ if (e.key === 'Enter') {
+ e.preventDefault(); // 阻止默认回车行为
+ console.log('输入内容:', e.target.value);
+ }
+});
+// 禁用页面右键菜单
+document.addEventListener('contextmenu', (e) => {
+ e.preventDefault();
+ alert('禁止右键');
+});
+```
+
+### 阻止事件冒泡示例
+```javascript
+// 点击输入框不触发父元素的 click 事件
+const child = document.querySelector('.txt');
+const parent = document.getElementById('txtBorder');
+child.addEventListener('click', (e) => {
+ e.stopPropagation(); // 阻止冒泡
+ console.log('输入框被点击');
+});
+parent.addEventListener('click', () => {
+ console.log('父元素被点击'); // 点击输入框时此代码不会执行
+});
+```
+
+## 二、专属属性
+
+### 键盘事件(keydown / keyup / keypress)
+
+| 属性 | 白话解释 | 返回值 |
+| ----------------------------- | ------------------------------------------------------------ | ------------------------------------------------------- |
+| `key` | 按键的「语义名称」,区分大小写,功能键也包含其中,`a`、`A`、`Enter`、`Backspace` 等。 | 表示按键语义名称的字符串 |
+| `code` | 按键的「物理位置名称」,不区分大小写,如 `KeyA`、`ArrowLeft`、`Space` 等。 | 表示按键物理位置名称的字符串 |
+| `ctrlKey`/`shiftKey`/`altKey` | 表示是否按住 `ctrl`/`shift`/`alt` 键,返回布尔值。 | `true` 或 `false`,表示是否按住 `ctrl`/`shift`/`alt`键 |
+
+### 键盘事件示例
+```javascript
+// 检测回车、删除、Ctrl + S 操作
+inputs[0].addEventListener('keydown', (e) => {
+ // 按回车提交
+ if (e.key === 'Enter') {
+ e.preventDefault();
+ console.log('提交:', e.target.value);
+ }
+ // 按删除提示
+ if (e.key === 'Backspace') {
+ console.log('正在删除内容');
+ }
+ // Ctrl + S 保存
+ if (e.ctrlKey && e.key ==='s') {
+ e.preventDefault();
+ console.log('执行保存操作');
+ }
+});
+// 检测方向键
+inputs[0].addEventListener('keydown', (e) => {
+ if (e.code === 'ArrowLeft') console.log('按了左箭头');
+ if (e.code === 'Space') console.log('按了空格键');
+});
+// 检测 Shift + A(大写 A)
+if (e.shiftKey && e.key === 'A') console.log('按了大写 A');
+// Mac 下 Command + C
+if (e.metaKey && e.key === 'c') console.log('Mac 复制');
+```
+
+### 鼠标事件(click / mousedown / mousemove / mouseover)
+
+| 属性 | 白话解释 | 返回值 |
+| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `clientX/Y` | 鼠标相对于「可视窗口」的坐标,不包含滚动条的偏移量。 | 表示鼠标相对于可视窗口的水平(`clientX`)或垂直(`clientY`)坐标的数字 |
+| `pageX/Y` | 鼠标相对于「整个文档」的坐标,包含滚动条的偏移量。 | 表示鼠标相对于整个文档的水平(`pageX`)或垂直(`pageY`)坐标的数字 |
+| `button` | 按下的鼠标按键,`0` 代表左键,`1` 代表滚轮,`2` 代表右键。 | `0`(左键)、`1`(滚轮)、`2`(右键)中的一个数字 |
+| `relatedTarget` | 鼠标移入或移出时的「关联元素」。例如在 `mouseover` 事件中,它表示从哪个元素移过来的。 | 鼠标移入或移出时的关联 DOM 元素对象 |
+
+### 鼠标事件示例
+```javascript
+// 点击页面显示鼠标相对于可视窗口的位置
+document.addEventListener('click', (e) => {
+ console.log('相对于窗口:', e.clientX, e.clientY);
+});
+// 滚动后仍能获取鼠标相对于整个文档的准确位置
+document.addEventListener('click', (e) => {
+ console.log('相对于文档:', e.pageX, e.pageY);
+});
+// 区分左键、右键点击
+document.addEventListener('mousedown', (e) => {
+ if (e.button === 0) console.log('左键点击');
+ if (e.button === 2) {
+ e.preventDefault();
+ console.log('右键点击');
+ }
+});
+// 鼠标移入输入框时,显示从哪个元素移过来的
+inputs[0].addEventListener('mouseover', (e) => {
+ console.log('从', e.relatedTarget.tagName, '移过来');
+});
+```
+
+### 焦点事件(focus / blur / focusin / focusout)
+
+| 属性 | 白话解释 | 返回值 |
+| --------------- | ------------------------------------------------------------ | ----------------------------- |
+| `relatedTarget` | 在焦点切换时的关联元素。在 `focus` 事件中,它是失去焦点的元素;在 `blur` 事件中,它是获得焦点的元素。 | 焦点切换时的关联 DOM 元素对象 |
+
+### 焦点事件示例
+```javascript
+// 焦点切换时提示焦点来源或目标
+inputs.forEach(item => {
+ item.addEventListener('focus', (e) => {
+ console.log('焦点从', e.relatedTarget?.placeholder, '移到当前输入框');
+ });
+ item.addEventListener('blur', (e) => {
+ console.log('焦点从当前输入框移到', e.relatedTarget?.placeholder);
+ });
+});
+```
+
+### 表单事件(change / input / submit)
+
+| 属性 / 操作 | 白话解释 | 返回值 |
+| ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `e.target.value` | 表单元素的当前值,需通过 `target` 获取,并非 `event` 直接属性。 | 表单元素的当前值,具体类型取决于表单元素类型(如输入框为字符串) |
+| `e.target.checked` | 复选框或单选框是否被选中,返回布尔值。 | `true` 或 `false`,表示复选框或单选框是否被选中 |
+| `submit`阻止 | 阻止表单的默认提交行为,避免页面刷新。 | 无返回值。该方法用于阻止表单的默认提交行为。 |
+
+### 表单事件示例
+```javascript
+// 实时监听输入框内容变化
+inputs[0].addEventListener('input', (e) => {
+ console.log('实时输入:', e.target.value);
+});
+// 监听单选框选中状态
+const radio = document.querySelector('input[type="radio"]');
+radio.addEventListener('change', (e) => {
+ console.log('是否选中:', e.target.checked);
+});
+// 表单提交时验证,不刷新页面
+const form = document.querySelector('form');
+form.addEventListener('submit', (e) => {
+ e.preventDefault();
+ console.log('表单提交,内容:', new FormData(form));
+});
+```
+
+## 总结
+
+掌握以下 3 步,可解决 90% 的事件处理场景:
+
+1. **找元素**:利用 `e.target` 获取触发事件的 DOM 元素。
+2. **拿信息**:依据事件类型获取相关上下文信息,如键盘事件用 `key`,鼠标事件用 `clientX`,焦点事件用 `relatedTarget` 等。
+3. **做操作**:根据需求使用 `preventDefault()` 阻止默认行为,或用 `stopPropagation()` 阻止事件冒泡。
+
+## 作业
+```html
+
+
+
+
+
+ Document
+
+
+
+
+ 第一题
+
+

+
+
+ 第二题
+
+ 第三题
+ 当前时间
+
+ 第四题
+
+
+ 第五题
+
+
+
+
+ 第六题
+
+
+ 第七题
+
+
+
+
+ 第八题
+
+
+ 第九题
+
+
+
+
+ 第十题
+
+
+
+
+
+
+
+```
+
+
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251201.md" "b/\351\231\210\346\200\235\345\223\262/20251201.md"
new file mode 100644
index 0000000000000000000000000000000000000000..0517431f707f0b362b1fbb87900c9f14eb25e88c
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251201.md"
@@ -0,0 +1,107 @@
+## 笔记
+
+### 文本编辑事件
+
+#### 核心事件(文本 / 内容操作)
+
+- `copy`:复制操作时触发(快捷键、右键菜单复制)
+- `cut`:剪切操作时触发(快捷键、右键菜单剪切)
+- `paste`:粘贴操作时触发(快捷键、右键菜单粘贴)
+- `select`:文本框(input/textarea)或可编辑元素(contenteditable)中文本被选中时触发
+
+#### 关键操作(Clipboard API)
+
+- 获取剪贴板内容:`event.clipboardData.getData('text')`(paste 事件中使用)
+- 设置剪贴板内容:`event.clipboardData.setData('text', 内容)`(copy/cut 事件中,需先阻止默认行为)
+- 阻止默认操作:`event.preventDefault()`(拦截复制 / 粘贴,自定义处理逻辑)
+
+### 二、拖放对象与放置目标事件
+
+#### 拖放前提
+
+- 拖拽元素需设置 `draggable="true"`(图片、链接默认可拖拽)
+
+#### 拖拽对象事件(源元素)
+
+- `dragstart`:开始拖拽时触发(可设置拖拽数据 `event.dataTransfer.setData()`)
+- `drag`:拖拽过程中持续触发
+- `dragend`:拖拽结束(无论成功与否)触发
+
+#### 放置目标事件(目标元素)
+
+- `dragenter`:拖拽元素进入目标时触发(需阻止默认行为,否则无法成为放置目标)
+- `dragover`:拖拽元素在目标上移动时触发(必须阻止默认行为,否则 `drop` 不触发)
+- `dragleave`:拖拽元素离开目标时触发
+- `drop`:在目标上释放拖拽元素时触发(完成放置,通过 `event.dataTransfer.getData()` 获取拖拽数据)
+
+#### 数据传递(DataTransfer API)
+
+- 设置拖拽数据:`event.dataTransfer.setData('text', 数据)`(dragstart 事件中)
+- 获取拖拽数据:`event.dataTransfer.getData('text')`(drop 事件中)
+- 设置拖拽效果:`event.dataTransfer.effectAllowed = 'copy/move/link'`(限制拖拽行为)
+
+## 作业
+
+### 第一部分
+
+#### 关键代码
+
+```html
+
+
+ 拖拽我到下方区域
+
+
+ 请将上方文本拖放到这里
+
+
+
+```
+
+#### 效果展示
+
\ No newline at end of file
diff --git "a/\351\231\210\346\200\235\345\223\262/20251203.md" "b/\351\231\210\346\200\235\345\223\262/20251203.md"
new file mode 100644
index 0000000000000000000000000000000000000000..c5c2f471ff517c39689b28bcf44a8225faf0b335
--- /dev/null
+++ "b/\351\231\210\346\200\235\345\223\262/20251203.md"
@@ -0,0 +1,203 @@
+## 笔记
+
+### Document 对象常用属性
+
+#### 基础结构相关
+
+- `document.documentElement`:获取 HTML 根元素(`` 标签)
+- `document.head`:获取文档的 `` 元素
+- `document.body`:获取文档的 `` 元素
+- `document.title`:获取或设置文档的标题(对应 `` 标签内容)
+- `document.URL`:获取当前文档的完整 URL
+- `document.domain`:获取当前文档的域名(跨域相关场景常用)
+- `document.referrer`:获取跳转至当前文档的前一个页面 URL(来源页面)
+
+#### 元素获取相关(便捷属性)
+
+- `document.forms`:获取文档中所有 `