GoogleChromeデベロッパーツールを使用してJavaScript関数にブレークポイントを設定しました。
関数のスコープ変数で値が「Fred」の変数を探しています。関数のスコープ内の変数からこの値を検索するにはどうすればよいですか?
GoogleChromeデベロッパーツールを使用してJavaScript関数にブレークポイントを設定しました。
関数のスコープ変数で値が「Fred」の変数を探しています。関数のスコープ内の変数からこの値を検索するにはどうすればよいですか?
開発ツールではデフォルトで検索が許可されていないため、実際に検索を実行できるように、コンソールにスクリプトを追加する必要があります。これがあなたのためのその機能です(更新については以下の私の要点コメントを参照してください):
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の詳細については、次のWebサイトをご覧ください。
この方法でコンソールに手動で:
console.log(this);
また
console.log({set x(){}});
これは次と同等です:
console.log(Object.defineProperty({},'x',{get: function(){}}));
コンソールで検索:
get x: function (){}
-> <function scope>
->Global: Window