diff --git "a/06 \351\231\210\345\277\227\344\274\237/20231205 JS\350\277\233\351\230\2662.md" "b/06 \351\231\210\345\277\227\344\274\237/20231205 JS\350\277\233\351\230\2662.md"
new file mode 100644
index 0000000000000000000000000000000000000000..a149104fd52e3d4af8aaffd003b3ac07747a1f6b
--- /dev/null
+++ "b/06 \351\231\210\345\277\227\344\274\237/20231205 JS\350\277\233\351\230\2662.md"
@@ -0,0 +1,374 @@
+#### 一.深入对象
+
+**构造函数**:是一种特殊的函数,主要用来初始化对象
+
+使用场景:==多个对象有相同属性,封装成一个构造函数==
+
+~~~ javascript
+// 创建一个构造函数,首字母要大写
+function Pig(uname,age){
+ this.uname = uname
+ this.age = age
+}
+// 创建对象
+const p1 = new Pig('佩奇',6)
+const p2 = new Pig('乔治',4)
+~~~
+
+实例成员:通过构造函数创建的对象称之为实例对象,==实例对象中==的属性和方法称之为==实例成员==(实例属性和实例方法)
+
+- 为构造函数传入参数,创建结构相同但值不同的对象
+- 构造函数创建的实例对象彼此独立互不影响
+
+静态成员:构造函数的属性和方法被称为静态成员(静态属性和静态方法)
+
+- 静态成员只能构造函数访问
+- 静态方法中 this 指向构造函数
+
+~~~ javascript
+// 静态成员
+function Pig(name){
+ this.name = name
+}
+Pig.eyes = 2 // 静态属性
+Pig.sayHi = function(){
+ log(this)
+}
+Pig.sayHi() // 指向构造函数
+log(Pig.eyes) // 2
+~~~
+
+#### 二.内置构造函数
+
+其实字符串。数值。布尔等基本数据类型也都有专门的构造函数,称为包装类型
+
+**Object**
+
+object 是内置的构造函数,用于创建普通对象
+
+三个常用静态方法:
+
+- **Object.keys** 获取对象中的所有属性(键),返回数组
+- **Object.keys** 获取对象中的所有属性值(值),返回数组
+- **Object.assign** 常用于对象拷贝
+
+~~~ javascript
+const o = {uname: 'pink',age: 18}
+log(Object.keys(o)) // [uname,age]
+log(Object.values(o)) // ['pink',18]
+// 拷贝
+const oo = {}
+Object.assign(oo,o) // 将 o 对象拷贝给 oo 对象
+// 给对象追加属性
+Object.assign(o,{sex: '男'})
+log(o) // [uname: 'pink',age: 18,sex: '男']
+~~~
+
+**Array**
+
+Array 是内置构造函数,用于创建数组
+
+常用实例方法:
+
+| 方法 | 作用 | 说明 |
+| ----------- | -------- | ---------------------------------------------------- |
+| **forEach** | 遍历数组 | 不返回数组,经常用于==查找遍历数组元素== |
+| **filter** | 过滤数组 | ==返回新数组==,返回==筛选满足条件==的数组元素 |
+| **map** | 迭代数组 | ==放回新数组==,返回==处理之后==的数组元素 |
+| **reduce** | 累计器 | 返回累计处理的结果,经常用于求和等 |
+| **find** | 查找元素 | 返回符合条件的第一个数组元素值,没则有返回undefined |
+| **every** | 检查数组 | 检查数组中所有元素,都满足某个条件,返回 true或false |
+| **some** | 检查数组 | 检查数组中所有元素,有元素满足条件,返回 true或false |
+| **concat** | 合并数组 | 合并两个数组,返回一个新数组 |
+| **sort** | 排序数组 | 对原数组单元值进行排序 |
+| **reverse** | 反转数组 | 将数组反转 |
+
+~~~ javascript
+// 数组 reduce 方法
+const arr = [1,5,8]
+//1. 没有初始值
+const total = arr.reduce(function(prev,current){
+ return prev + current //上一次的值 + 当前的值
+})
+log(total) // 14
+//2. 有初始值
+const total = arr.reduce(function(prev,current){
+ return prev + current //上一次的值 + 当前的值
+}.10)
+log(total) // 24
+//3. 箭头函数写法
+const total = arr.reduce((prev,current) => prev + current, 10)
+~~~
+
+案例:有一个员工数组对象,计算当月支出多少薪资
+
+~~~ javascript
+const arr =[
+ {
+ uname: '张三',
+ salary: 10000
+ }, {
+ uname: '李四',
+ salary: 10000
+ }, {
+ uname: '王五',
+ salary: 10000
+ }
+]
+//一定要有初始值,否则默认第一个对象为初始值
+const total = arr.reduce((prev,current) => prev + current.salary, 0)
+log(total) // 30000
+~~~
+
+静态方法 **Array.from(数组)** 将伪数组转换为真数组
+
+~~~ javascript
+const lis = document.querySelectorAll('ul li')
+const liArr = Array.from(lis)
+~~~
+
+**String**
+
+常见实例方法1:
+
+| 方法 | 说明 |
+| --------------------------------------- | --------------------------------------------- |
+| **split(’分隔符’)** | 将字符串转换为数组,和 join() 相反 |
+| **substring(起始索引,结束索引)** | 截取字符串 |
+| **startswith(检查字符串,检测开始索引)** | 检测是否以某字符开头,返回布尔值,endwith相反 |
+| **includes(搜索的字符串,位置索引)** | 判断一个字符串是否包含某个字符 |
+
+**Number**
+
+ **toFixed()** 设置保留小数位的长度
+
+~~~ javascript
+const num = 10.923
+log(num.toFixed(1)) //10.9
+log(num.toFixed(2)) //10.92
+log(num.toFixed()) //11 四舍五入
+~~~
+
+
+
+### 作业
+
+**综合案例**
+
+~~~ html
+
+~~~
+
+**购物车**
+
+~~~ html
+
+~~~
\ No newline at end of file
diff --git "a/06 \351\231\210\345\277\227\344\274\237/20231206 Ajax\351\242\204\344\271\240.md" "b/06 \351\231\210\345\277\227\344\274\237/20231206 Ajax\351\242\204\344\271\240.md"
new file mode 100644
index 0000000000000000000000000000000000000000..813fa70062225013e49a33076458cc657e641d9e
--- /dev/null
+++ "b/06 \351\231\210\345\277\227\344\274\237/20231206 Ajax\351\242\204\344\271\240.md"
@@ -0,0 +1,100 @@
+### Ajax
+
+```html
+//test.josn的代码
+{
+ "reply":"我收到啦!"
+}
+
+const xhr = new XMLHttpRequest();
+xhr.onreadystatechange = () => {
+ if (xhr.readyState !== 4) return;
+ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
+ console.log(xhr.responseText);
+ }
+};
+xhr.open('GET', 'text.json', true);
+xhr.send(null);
+
+// “replay” : {"我收到啦!",“”}
+```
+
+1.创建xhr对象
+
+```js
+const xhr = new XMLHttpRequest();
+```
+
+2.利用onreadystatechange属性,封装一个函数,用于监听 readyState的变化。
+
+```js
+xhr.onreadystatechange = () => {
+if (xhr.readyState !== 4) return;
+if (xhr.status >= 200 && xhr.status < 300 ){
+ console.log(xhr.responseText);
+ }
+};
+```
+
+2.1在xhr对象执行收发数据的时候,它会经历五种状态:
+
+
+| Ajax状态码 | 状态 |
+| ---------- | ------------------------------------------------------------ |
+| 0 | (**未初始化**)未启动 |
+| 1 | (**启动**)已经调用 open(),但尚未调用 send() |
+| 2 | (**发送**)发送状态,已经调用 send(),但尚未接收到响应 |
+| 3 | (**接收**)已经接收到部分响应数据 |
+| 4 | (**完成**)已经接收到全部响应数据,而且已经可以在浏览器中使用了 |
+
+2.2判断HTTP状态码是否为200-299
+
+Ajax状态码为4是不够的,这仅仅表明收到服务器端响应的全部数据,并不能保障数据都是正确的。
+
+所以,我们还需要判断HTTP的状态码,判断xhr对象的status属性值是否在200到300之间(200-299 用于表示请求成功)
+
+```js
+if (xhr.status >= 200 && xhr.status < 300 ){
+ console.log(xhr.responseText);
+}
+```
+
+所以要想请求成功完成,必须要满足上面两个条件。
+
+3.准备发送请求
+
+```js
+xhr.open('GET','text.json', true);
+```
+
+参数1:选用"GET"或者“POST”的请求方式
+
+参数2:发送请求的地址
+
+参数3:是否异步
+
+4.发送请求
+
+```js
+xhr.send(null)
+```
+
+ 注意:send() 的参数是通过请求体携带的数据,而GET请求是通过请求头携带数据的,所以要把send的参数置为null
+
+```html
+
+```
+