记录一些常用的f12调试功能
element元素
- 给元素添加断点:在元素中可以直接右键选择在子树修改/属性修改/删除节点的时候打断点
- 设置的断点可在右侧“DOM断点”中查看
network网络
- 禁用缓存: 开发时可根据需要勾上
- 调节网速: “无限制”/“已停用节流模式”处调整
- 上半部分 网络,下半部分 源代码搜素+控制台打印: 把 全局搜索(Ctrl + Shift + F) 打开就行,那可太方便了
修改请求参数并重新发送
- edge浏览器修改请求参数并重新发送参考文章
- 使用场景: pdd解密的接口传参偶尔出现问题,想测试下是不是缺少某个请求参数导致的报错,但是代码比较复杂,直接从f12操作先定位问题所在就方便许多
- postman对这种pdd平台解密不太好使
- 使用步骤:
- 网络-fetch/XHR-左键选中一个请求-右键复制 复制为fetch-在控制台中粘贴后修改参数-enter发送请求
- fetch 是javascript中一个网络请求的函数或者工具,Edge/Chrome在我们 Copy as fetch 的时候帮我们把请求的各种参数转换成了使用 fetch 请求的代码,所以我们可以直接在控制台上直接执行从而达到请求重放的效果
console控制台
- 可以在这执行js语句
js代码换行
- console中输入的代码都是立即执行的,回车就执行。
- javascript代码中没有一般意义上的“行”的概念,分号才是真正的换行标志,所以如果你想输入多行代码,可以用分号隔开,如
a=1; b=2
- 一定要换行,可以按
shift+Enter
console对象
- console对象用于js调试,但不是js原生对象,它是宿主对象,即浏览器提供的内置对象
- 注意: [《console.log直接打印的对象值是变化的》]
支持printf的占位符格式
- 支持的占位符有:字符(%s)、整数(%d或%i)、浮点数(%f)、对象(%o或%O)还有css格式化字符串(%c)
- 理解:将后面的变量赋值给了前面的占位符的位置,他们是一一对应的。这种写法在复杂的输出时,能保证模板和数据分离,结构更加清晰
- *最常用的: 是
%c
,可以让log颜色鲜明起来 - 例子可见菜鸟教程
占位符 | 作用 |
---|---|
%s | 字符串 |
%d or %i | 整数 |
%f | 浮点数 |
%o | 可展开的DOM(像在开发者工具Element面板那样例子) |
%O | 列出DOM的属性(像JS对象那样访问DOM元素,log+%O等同于console.dir) |
%c | 根据提供的css样式格式化字符串 |
1 | console.log("%d年%d月%d日",2011,3,26); // 2011年3月26日 |
除log外常用的方法
除了
clear()
、table()
,其他方法在Web Worker中可用 ————可参考MDN
- 下表参考菜鸟教程
方法 | 描述 | 实例 |
---|---|---|
assert() | assert方法接受两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果。 | console.assert(true === false, “判断条件不成立”) // Assertion failed: 判断条件不成立 |
clear() | 清除当前控制台的所有输出,将光标回置到第一行 | console.clear() |
count() | 用于计数,输出它被调用了多少次。 | (function() { for (var i = 0; i < 5; i++) { console.count(‘count’); } })(); |
error() | 输出信息时,在最前面加一个红色的叉,表示出错,同时会显示错误发生的堆栈。 | console.error(“Error: %s (%i)”, “Server is not responding”,500) |
group() | 用于将显示的信息分组,可以把信息进行折叠和展开。 | console.group(‘第一层’); console.group(‘第二层’); console.log(‘error’); console.error(‘error’); console.warn(‘error’); console.groupEnd(); console.groupEnd(); |
groupCollapsed() | 与console.group方法很类似,唯一的区别是该组的内容,在第一次显示时是收起的(collapsed),而不是展开的。 | console.groupCollapsed(‘第一层’); console.groupCollapsed(‘第二层’); console.log(‘error’); console.error(‘error’); console.warn(‘error’); console.groupEnd(); console.groupEnd(); |
groupEnd() | 结束内联分组 | console.group(‘Group One’); console.group(‘Group Two’); // some code console.groupEnd(); // Group Two 结束 console.groupEnd(); // Group One 结束 |
info() | console.log 别名,输出信息 | console.info(“runoob”) |
log() | 输出信息 | console.log(“runoob”) |
table() | 将复合类型的数据转为表格显示。 | var arr= [ { num: “1”}, { num: “2”}, { num: “3” } ]; console.table(arr); var obj= { a:{ num: “1”}, b:{ num: “2”}, c:{ num: “3” } }; console.table(obj); |
time()、timeEnd() | 计时功能 | console.time(‘计时器1’); console.timeEnd(‘计时器1’); |
dir显示对象属性
console.dir(obj)
: 显示指定 JavaScript 对象的属性列表- 注意:
- 内部除了对象啥都不能放,否则无法正常展示
- 和log一样,展示的是对象引用,不一定是放置console位置当下的对象属性值(可打断点避免这个问题)
trace追踪函数的调用轨迹
[console.trace()](https://www.runoob.com/jsref/met-console-trace.html)
: 可以查看函数体中设置了console.trace
的函数是如何被一步一步执行到console.trace
位置的- 对逻辑很复杂的情况就可以直接在目标函数内写个
console.trace
,不用一步一步打断点来观察 - 注意: 处在异步中会出现无法追踪的情况,复杂函数基本都是
async-await
,然而并无法使用。- 解决方法:
- 可以
console.error
,它会打印函数的调用栈,在打印出的堆栈中可以找到调用路径 - 也可以在“源代码”中打断点,可在右侧“调用堆栈”中查看调用路径
- 可以
- 解决方法:
1 | /*函数是如何被调用的,在其中加入console.trace()方法就可以了*/ |
count次数器+countReset重置次数器
- label可选,不填则为默认计数器(可理解为default)
- count(label)
- countReset(label)
time+timeLog+timeEnd计时功能
1 | console.time("控制台计时器一"); |
table表格形式显示数组/对象
console.log(data, columns)
- 默认会把所有元素罗列在每一列,但可以使用
columns 参数
选择要显示的列的子集,以此**隐藏部分列** - 注意:列数太多时可能出现不生效的情况,需要提前处理下数据
1 | const arr = [ |
1 | console.table(arr) |
(索引) | code | nameZh |
---|---|---|
1 | ‘ON-DELIVERY’ | ‘寄付’ |
2 | ‘MONTHLY’ | ‘月结’ |
1 | console.table(arr, ['code']) |
(索引) | code |
---|---|
1 | ‘ON-DELIVERY’ |
2 | ‘MONTHLY’ |
sources源代码
- 可以查看到当前网页的所有源文件 包括:样式、css、图片、js 文件等。在左侧栏中可以看到源文件以树结构进行展示
- 在“搜索”中输入代码,可以看到相关的本地代码
- 可以把 全局搜索(Ctrl + Shift + F) 打开
- 注意:生产环境中可点击左下角
{}
格式化代码,方便查看
- 打断点:在源中的代码里可以直接打断点
- 右键可选择添加条件断点/Logpoint打印日志到控制台(不中断)
- 打断点后可在右侧“调用堆栈”中查看到是如何通过各个函数一步步调用到当前位置的
应用/应用程序
查看/清除缓存
- 存储中包含本地存储、会话存储、Cookie
Vue
- 可以改一些数据看效果
调试hover等状态
- 方法1:F12-element-找到对应元素标签-右键-强制状态-可选择
:hover
、:focus
等状态 - 方法2:F12,鼠标悬浮到目标元素=>点击鼠标右键,界面出现菜单,此时不要用鼠标=>将鼠标移动到开发者控制台,找到目标元素
- 方法3:F12=>鼠标悬浮到目标元素=>键盘输入“ctrl+shift+c”可以调出f12的小箭头
- 方法4:F12=>元素=>选中该元素=>在“样式”中选
:hov
=>强制元素状态
调试生产环境
生产环境的问题调试需要一点小技巧
格式化源代码
- 发现报错以后点击报错,进入的f12源代码如果是一行的,此时可点击左下角的
{}Pretty print
进行格式化,从而帮助定位问题
本地连生产环境域名进行测试
- 项目配置文件中,连接后端服务的ip位置换为生产环境的域名
- 本地运行项目
- 将生产环境登录后的cookie复制到本地运行起来的项目f12中
- 据说改本地host即可不用复制cookie
性能优化
- 使用f12中的Lighthouse分析性能,找到需要优化的位置