【发布时间】:2023-03-28 03:10:01
【问题描述】:
我使用 Google Chrome 开发者工具在 javascript 函数中设置了一个断点。
我正在函数的作用域变量中查找值为“Fred”的变量。如何在函数范围内的变量中搜索这个值?
【问题讨论】:
标签: javascript google-chrome-devtools
我使用 Google Chrome 开发者工具在 javascript 函数中设置了一个断点。
我正在函数的作用域变量中查找值为“Fred”的变量。如何在函数范围内的变量中搜索这个值?
【问题讨论】:
标签: javascript google-chrome-devtools
您需要将脚本添加到控制台,以便您可以实际执行搜索,因为默认情况下开发人员工具不允许这样做。这是适合您的功能(请参阅下面的我的 Gist 评论以获取更新):
function scanScope(whatToScan, scanValue) {
for (var key in whatToScan) {
if (whatToScan[key] == scanValue) {
console.log(key + ' = ' + whatToScan[key]);
} else {
if( (typeof whatToScan[key] === "object") && (key !== null) ) {
scanScope(whatToScan[key], scanValue);
}
}
}
}
将其复制并粘贴到控制台中,然后使用要搜索的范围和要搜索的值调用它。 当然,请注意不要搜索太大的对象。例如,如果您使用 Angular 进行编程,并遵循“始终有一个点”的规则,则可以扫描它像这样的电话:
scanScope($scope.model, 'Fred');
【讨论】:
由于您在 Chrome DevTools 中的特定行上设置了断点,因此该断点位于所述变量的范围/上下文中。当浏览器执行到达断点时,您将可以访问其以及全局范围内的所有变量/函数。
导航到控制台选项卡并开始输入,控制台将自动完成范围内的变量。
有关 Chrome DevTools 的更多信息,请访问:
【讨论】:
以这种方式手动在控制台中:
console.log(this);
或
console.log({set x(){}});
相当于:
console.log(Object.defineProperty({},'x',{get: function(){}}));
在控制台中查找:
get x: function (){} --> <function scope> --> Global: Window
【讨论】: