Sie könnten alle Elemente im globalen Bereich wie diese iterieren:
var test = 123,
someVar = 812;
for(key in window){
if(typeof window[key] === 'number' && window[key] == 123){
console.log(key, window[key]);
}
}
dass Kombinieren mit einiger Rekursion, und Sie könnten theoretisch alle Objekte durchlaufen und ihre Kinder, in einem Objekt:
function searchObject(object, search){
for(key in object){
if(typeof object[key] === 'number' || typeof object[key] === 'string'){
if(object[key] === search){
console.log(key, window[key]);
}
}else if(typeof object[key] === 'object'){
searchObject(object[key], search);
}
}
}
Dies ist nur ein schnell und schmutzig Beispiel. Es prüft nur auf strikte Gleichheit (also keine "Zeichenfolge enthält"), und es iteriert über Arrays mit for in
, was böse ist. Aber es sollte Ihnen eine Vorstellung davon geben, wie es funktioniert.
Übergeben Sie diese Funktion jedoch nicht an window
oder document
. Das wird aufgrund von Zirkelverweisen nicht funktionieren.
Sie können jedoch auch eine breakpoint in your code in the chrome dev tools platzieren.
Sie können dann den aktuellen Wert Ihrer Variablen im Bereich "Scope Variables" auf der rechten Seite überprüfen.
warum nicht 'Fenster [key] === 123' statt Typen manuell zu vergleichen und dann Nötigung Gleichheit mit? –
@JanDvorak: Es war Fehler werfen für mich, wenn ich nicht: 'Uncaught TypeError: kann Objekt in primitiven Wert nicht konvertieren' (Chrome-Konsole) – Cerbrus
Dies kann leicht scheitern: Sicherheitsausnahmen ausgelöst, wenn Cross-Origin-Frames, zyklische Strukturen (tatsächlich gibt es ein paar schon) ... –