Bạn có thể duyệt qua tất cả các mục trong phạm vi toàn cầu như thế này:
var test = 123,
someVar = 812;
for(key in window){
if(typeof window[key] === 'number' && window[key] == 123){
console.log(key, window[key]);
}
}
Cùng với đó là một số đệ quy, và bạn có lý thuyết có thể lặp qua tất cả các đối tượng và con cái của họ, có sẵn trong một đối tượng:
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);
}
}
}
Đây chỉ là nhanh và bẩn ví dụ. Nó chỉ kiểm tra sự bình đẳng nghiêm ngặt (Vì vậy, không có "chuỗi chứa"), và nó lặp qua mảng với for in
, điều đó là điều ác. Nhưng nó sẽ cung cấp cho bạn một ý tưởng về cách nó hoạt động. Tuy nhiên,
Đừng vượt qua window
hoặc document
với chức năng này. Điều đó sẽ không hoạt động do tham chiếu vòng tròn.
Tuy nhiên, bạn cũng có thể đặt breakpoint in your code in the chrome dev tools.
Sau đó, bạn có thể kiểm tra giá trị hiện tại của các biến trong vùng "Phạm vi biến" ở bên phải.
tại sao không làm 'cửa sổ [key] === 123' thay vì so sánh các loại bằng tay và sau đó sử dụng ép buộc bình đẳng? –
@JanDvorak: Nó đã ném lỗi cho tôi nếu tôi không: 'Loại lỗi không xác định: Không thể chuyển đổi đối tượng thành giá trị nguyên thủy '(Bàn điều khiển Chrome) – Cerbrus
Điều này có thể thất bại một cách dễ dàng: ngoại lệ bảo mật được ném khi chạm vào khung hình gốc, cấu trúc vòng (trên thực tế, có một số ít) ... –