
1.JS基础与浏览器开发工具

第一章 JS逆向Q&A
第一节 为什么要JS逆向?
1 | > 回顾爬虫的流程: |
第二节 JS逆向的要学什么❗
1 | > 总结一句话"JS逆向"解决什么问题? |
第二章 JS语法基础
第一节 四大变量类型
1 | // ①str: 除了空串都是true |
第二节 生命周期
- $ 语法: 全局和局部:在方法内部定义的就是局部变量, 除此之外都是全局变量
- 区分方法和块: 虽然都是
{}里面, 但块中的变量也是全局 - 区分var和全局: 不是var定义的都是全局, var在方法内部定义也是局部变量
- 区分方法和块: 虽然都是
- JavaScript变量生命周期在它声明时初始化
- 局部变量在函数执行完毕后销毁。
- 全局变量在页面关闭后销毁。
第三节 函数
2.3.1 定义函数的三种方式
- ①有名函数: 在声明前后都可以调用
1 | // 1. 有名函数 |
- ②函数赋值表达式定义函数: 只能在声明后调用
1 | // 2.函数赋值表达式 定义函数 |
- ③自执行函数: 运行到就执行
- ! 注意: 前面一定要有
~或!, 因为要与前面代码分开, 否则报错
- ! 注意: 前面一定要有
1 | // 3.自执行函数 |
2.3.2 外内部函数外部调用
- $ 语法: 用于自执行方法, Hook时用的多
1 | var _xl; |
2.3.3 其他特性
- 如果return多个值, 只有最后一个会返回
1 | function func() { |
第四节 函数传参
- $ 语法一: 实参: ①相传几个传几个 可以> 形参; 也可以<形参; ②想传什么类型传什么
- $ 语法二: 每个方法都默认有一个”形参”:
arguments
1 | function func1(a, b, c) { |
第五节 对象
- $ 语法: JS对象中必有的属性【图一】
- $ 语法:
hasOwnProperty: 【图二】查看是否有某个属性(‘成员变量’) - $ 语法:
isPrototypeOf: 【图三】查看是否是另一个对象的原型


- $ 语法:
第六节 常用数据结构
这几个typeof 都是obj对象的数据类型
2.6.1 List
1 | // 初始化 |
2.6.2 Set
1 | // 初始化 |
2.6.3 Map
1 | // 初始化 |
2.6.4 Dict
1 | // 初始化 |
| 数据结构 | 初始化 | 增 | 删 | 改 | 查 | 清空 | 有序 | 键类型 |
|---|---|---|---|---|---|---|---|---|
| List | [] / new Array() | push/unshift | pop/shift/splice | splice/直接赋值 | find/indexOf | length=0 | ✔️ | 数字索引 |
| Set | new Set() | set.add(value) | set.delete(value) | 无直接修改方法 | set.has(value) | set.clear() | ✔️ | 值即键 |
| Map | new Map() | map.set(key, val) | map.delete(key) | map.set(key, val) | map.get(key) | map.clear() | ✔️ | 任意类型 |
| Dict | {} / new Object() | obj.key=value | delete obj.key | obj.key=newValue | obj.key / in | 遍历删除 | ❌ | 字符串/Symbol |
第8节 JSON转化
- $ 语法: JSON转对象
var obj = JSON.parse(or_str)❗从服务器接受JSON.parse - $ 语法: 对象转JSON
var json_str = JSON.stringify(obj)❗发给服务器时JSON.stringify
第9节 拦截对象的get和set方法
- $ 语法:
Object.defineProperty(obj, prop, descriptor))link Object.defineProperty为对象的属性赋值,替换对象属性基本语法- obj:需要定义属性的当前对象;
- prop:当前需要定义的属性名;
- descriptor: 需要拦截的方法;
1 | // 有一个user类, 其中只有age一个变量, 初始值为'123' |
第10节 JS的异步Promise
同时学习下 “箭头函数” 的用法
2.10.1 基本写法
- & 说明: 异步的执行流程
- ①当执行
orderFood()时,立即同步执行Promise构造函数中的executor函数(即function(resolve, reject){…}) - ②计时器等待1s后, 若随机数<0.5,调用resolve(“🍔…”),Promise状态变为fulfilled; 否则调用reject(“❌…”),Promise状态变为rejected
- ③若调用resolve:执行.then()注册的回调函数,参数接收”🍔…”; 若调用reject:执行.catch()注册的回调函数,参数接收”❌…”
- ①当执行
1 | // 1. 创建Promise对象(点外卖过程) |
2.10.2 实际写法
- & 说明: 和上面写法的区别
- ①这里用的参数接收, 上面是写了个方法返回 =>这里的orderFood每次调用结果都和首次调用一致, 并且只有首次调用会等待1s, 后续都是直接拿之前的值; 2.10.1不一样, 每次返回的都不一样, 都wait 1s等值
- ②这里用了箭头表达式
1 | // 创建 Promise(点外卖过程) |
第11节 void 0和undefined
void 0 是 undefined 的安全写法(避免 undefined 被重写)
第12节 判断是 自定义方法/JS自带方法

第13节 py和js转JSON时空格问题
- $ 语法: Post请求发
json=会自动json.dumps()[[4.Requests模块#第三节 发送POST请求post()使用 data传参]] link

第14节 JS的对象 function XXX() {} 和class XXX{}
- $ 语法:
function XXX() {}和class XXX{}都是JS的类, ①前者是 “构造方法” 后者是 标注的类创建②后者是ES6才有的语法
| 特性 | 构造函数写法 (function) | 类写法 (class) |
|---|---|---|
| 1. 静态方法 | ClassName.staticMethod = function() {} | static staticMethod() {} |
| 2. 静态变量 | ClassName.staticVar = value | 类外部定义 或 static 块初始化 |
| 3. 成员方法 | ClassName.prototype.method = function() {} | 直接在类体中定义 method() {} |
| 4. 成员变量 | 在构造函数内 this.var = value | 在构造函数内 this.var = value |
| 5. 构造器 | 函数体本身 function ClassName() {} | constructor() {} 方法 |
| 6. 创建实例 | new ClassName() (可不加 new,不安全) | new ClassName() (必须加 new) |
| 7. 构造器创建 | 直接调用函数 function ClassName() {} | 通过 constructor() {} 方法 |
| 8. 调用静态 | ClassName.staticMethod() | ClassName.staticMethod() |
| 9. 调用成员 | instance.method() | instance.method() |
- $ 语法: 构造方法的写法
1 | // ========== 构造函数写法 ========== |
- $ 语法: ES6类的写法
1 | // ========== 类写法 ========== |
第三章 浏览器开发工具
第一节 解决无限debugger
| 普通的 | construct构造器生成的 | eval生成的 | |
|---|---|---|---|
| link | √ | ||
| link | √ | √ | √ |
第二节 堆栈的使用
- 和 “数据结构” 中的栈一样, 越在底部的, 越先调用
- 点击对应的栈后会跳到栈所在的js作用域 (控制台, 监视…都只能调用/展示该栈中有的方法)

第三节 事件监听器断点

第四节 完整复制obj对象
- $ 语法: 使用
copy(对象)的方式, 直接复制到剪切板
1 | // 在控制台输入 |
第五节 刷新和发包的区别
所以, 当前确定某个 “全局变量” 时, 可能需要刷新, 而不是发包
- 发包只是: 修改部分值
- 刷新: 是全部接口
- Title: 1.JS基础与浏览器开发工具
- Author: 明廷盛
- Created at : 2025-02-15 14:34:49
- Updated at : 2025-02-15 15:34:00
- Link: https://blog.20040424.xyz/2025/02/15/🐍爬虫工程师/第二部分 JS逆向/1.JS基础与浏览器开发工具/
- License: All Rights Reserved © 明廷盛





