2017-03-10 13 views
0

Chrome Developer Toolsのコンソールで、windowと入力してEnterキーを押すと、ウィンドウオブジェクトのプロパティであるグローバル変数の長いリストが表示されます。これを、ユーザーによって追加され、ウィンドウオブジェクトにまだ組み込まれていないものにフィルタリングする方法はありますか?ユーザが追加したすべてのグローバル(ウィンドウ)変数をリストする方法はありますか?

答えて

2

// setTimeout is needed and is being used here just if the property adding and the checking will be done in sequence. To avoid getting the same reference values on the current time lapse. Check the answer code 
 

 
// Get current window Properties; 
 
var windowInitProperties = Object.getOwnPropertyNames(window); 
 

 
setTimeout(() => window.newProperty = 'newProperty', 0) 
 

 
setTimeout(() => { 
 
    // List new Properties; 
 
    console.log(
 
     Object.getOwnPropertyNames(window).filter(property => { 
 
      return windowInitProperties.indexOf(property) < 0; 
 
     }) 
 
    ); 
 
}, 0)

// Get current window Properties; 
var windowInitProperties = Object.getOwnPropertyNames(window); 


// New property added to window 
var newProperty = 'newProperty'; 

// List new Properties; 
console.log(
    Object.getOwnPropertyNames(window).filter(property => { 
     return windowInitProperties.indexOf(property) < 0; 
    }) 
); 

Object.getOwnPropertyNames代わりのObject.keysenumerable: falseであっても、プロパティを取得するために必要であることに留意し。

0

可能であっても、それは可能だと思います。悪い習慣です。 代わりに、次のようにウィンドウオブジェクトに名前空間を作成できます。

window.myApp = window.myApp || {};

myApp.variable1 = value1; ... myApp.variableN = valueN;

+0

私はあなたに同意しません。私は従来のアプリケーションで作業しており、定義した迷子のグローバル変数を見続けているので、作成したばかりの数を確認するためのリストを取得するのは興味がありました。 – jbyrd

0

この特定のケースでChromeチームが何かを構築しない限り、答えは「いいえ」です。

ウィンドウは単なるオブジェクトです。追加されたプロパティは、誰がそれを追加したかなどの情報やメタデータを保持しません。

ウィンドウに追加するプロパティの接頭辞を付ける必要があります。これにより、ウィンドウを使用する他のライブラリとの衝突を防ぐことができます。そして、接頭辞を使用するプロパティ/値だけを取得するための簡単なfor-inループを作成できます。

1

グローバル変数キャッシュにコア/定義済みの変数名を追加する前に、新しいグローバル変数を追加した後、新しいリストを古いものと比較して、新しいグローバル変数を出力することができます。

var predefined_variables = Object.keys(window); 

window.newone = 'test'; 
window.xyz = 'testXYZ'; 

var new_variables = Object.keys(window).filter(function(key){ 
    return predefined_variables.indexOf(key)<0; 
}); 

console.log(new_variables); 
//["newone", "xyz"] 
+0

ニース - そうする必要があります。 – jbyrd

関連する問題