Chrome DevTools调试JavaScript代码的两个问题咨询
Chrome DevTools调试JavaScript问题解答
问题1:跟踪filter方法生成数组的过程
- 在
filter的回调函数里添加debugger语句,每次执行回调时会自动暂停,此时可在Scope面板查看当前处理的元素,以及逐步构建的过滤结果 - 给
filter回调所在行加条件断点:右键行号选择「Add conditional breakpoint」,设置触发条件(比如匹配你的筛选逻辑arr.indexOf(item) !== -1),当条件满足时暂停,精准跟踪每一步筛选过程 - 使用逐语句调试(F11):在Sources面板找到对应代码行打普通断点,按F11一步步执行回调的每一行,观察每次回调是否保留当前元素,逐步看到数组生成的完整流程
- 在Watch面板添加监控表达式,比如直接输入
Array.from(this)(回调内的this指向原数组),或者在回调里临时打印当前已筛选的元素片段(比如console.log([...当前过滤临时集合]))
问题2:console.log输出顺序异常的原因
这是JavaScript表达式计算规则和控制台特性共同导致的:
- 表达式计算顺序:执行
console.log('p'+Access(...) +'s')时,JS会先完整计算括号内的内容——先调用Access函数,再把返回值和'p'、's'拼接成字符串,最后才执行外层的console.log - 控制台延迟渲染:如果
Access函数内部的console.log输出的是数组这类引用类型,浏览器控制台不会立即显示它的当前值,而是等你点击展开时才读取最新状态;而外层的字符串是原始类型,会被即时输出。这就造成了视觉上“p开头的字符串先出现”的错觉。把函数内部的数组转成字符串输出(比如console.log(JSON.stringify(yourArray))),就能看到正确的输出顺序
内容的提问来源于stack exchange,提问作者Sergei Bobrov
相关产品推荐
相关产品推荐

