2010-02-09 9 views
28

क्या किसी पृष्ठ पर सभी वैश्विक चर के नाम/मान पुनर्प्राप्त करने का कोई तरीका है?किसी पृष्ठ पर सभी (जावास्क्रिप्ट) वैश्विक चर प्राप्त करना

मैं एक जावास्क्रिप्ट समारोह लिखने के लिए निम्नलिखित करना चाहते हैं:

  1. सभी वैश्विक 'xxx_' उपसर्ग के साथ चर का पता लगाएं और एक सरणी में उन्हें छड़ी (उदाहरण के लिए)
  2. का उपयोग कर एक क्वेरी स्ट्रिंग का निर्माण इस प्रकार नाम मान युग्म: xxx_glob_var1 = मान 1 & xxx_glob_var2 2 = मान आदि

मैं यह करने के लिए कैसे करते हैं?

+1

संभावित डुप्लिकेट (छोटे स्ट्रिंग-बिल्डिंग भाग को छोड़कर) [जावास्क्रिप्ट - सभी वैश्विक चर डंपिंग] (https://stackoverflow.com/questions/8369338/javascript-dumping-all-global-variables) – Bergi

उत्तर

27

कुछ इस तरह:

function getGlobalProperties(prefix) { 
    var keyValues = [], global = window; // window for browser environments 
    for (var prop in global) { 
    if (prop.indexOf(prefix) == 0) // check the prefix 
     keyValues.push(prop + "=" + global[prop]); 
    } 
    return keyValues.join('&'); // build the string 
} 

एक परीक्षण उपयोग:

var xxx_foo = "foo"; 
xxx_bar = "bar"; 
window.xxx_baz = "baz"; 

var test = getGlobalProperties('xxx_'); 
// test contains "xxx_baz=baz&xxx_bar=bar&xxx_foo=foo" 
+0

द्वारा बनाई गई वस्तुओं को प्राप्त करना चाहते हैं तो यह उपयोगी नहीं है! बहुत धन्यवाद –

+0

इनपुट इनपुट क्यों सूचीबद्ध नहीं है ('GetGlobalProperties (" इनपुट ")')? यह एक वैश्विक चर है, है ना? –

2

आप कुछ इस तरह कर सकता है:

for (var i in window) { 
    // i is the variable name 
    // window[i] is the value of the variable 
} 

इस के साथ हालांकि, आप अतिरिक्त डोम खिड़की से जुड़ी संपत्तियों की एक गुच्छा मिल जाएगा।

+3

ऑब्जेक्ट .keys (खिड़की); 'बहुत कम अतिरिक्त डोम गुण दिखाता है। –

+0

@DanDascalescu अभी भी 200 से अधिक है, इसलिए जब आप केवल अपनी स्क्रिप्ट – Pawel

3

कुछ मामलों आप गैर enumerable गुण को खोजने के लिए चाहते हो सकता है में; इसलिए for..in काम नहीं करेगा (spec, about chrome) और न तो Object.keys दोनों ही केवल संख्यात्मक कुंजी का उपयोग करेंगे। ध्यान दें कि for..inin से अलग है लेकिन हम इसे पुन: उपयोग करने के लिए उपयोग नहीं कर सकते हैं।

यहां Object.getOwnPropertyNames (संगतता IE9 +) का उपयोग कर एक समाधान है। मैंने केवल तब भी समर्थन जोड़ा है जब आप केवल समेकित गुण चाहते हैं या यदि आप संदर्भ में किसी अन्य को खोजना चाहते हैं (वैश्विक नहीं)।

function findPrefixed(prefix, context, enumerableOnly) { 
    var i = prefix.length; 
    context = context || window; 
    if (enumerableOnly) return Object.keys(context).filter(function (e) {return e.slice(0,i) === prefix;}); 
    else return Object.getOwnPropertyNames(context).filter(function (e) {return e.slice(0,i) === prefix;}); 
} 
findPrefixed('webkit'); 
// ["webkitAudioContext", "webkitRTCPeerConnection", "webkitMediaStream", etc.. 

फिर यदि आप शामिल होना चाहते हैं उदा।

findPrefixed('webkit').map(function (e) {return e+'='+window[e];}).join('&'); 
// "webkitAudioContext=function AudioContext() { [native code] }&webkitRTCPeerConnection=function RTCPeerConnection() etc.. 
25

या आप बस दौड़ सकते हैं;

Object.keys(window); 

यह कुछ अतिरिक्त वैश्विक दिखाएगा (~ 5), लेकिन अब तक for (var i in window) जवाब की तुलना में कम।

+0

कुंजी परिभाषित नहीं है। – gsamaras

+2

@gsamaras 'Object.keys' क्रोम 5+, फ़ायरफ़ॉक्स 4+, आईई 9 +, और ओपेरा 12+ में उपलब्ध है। –

+0

मैं @ rink.attendant.6 देखता हूं, धन्यवाद। आलीशान, आप इसे अपने उत्तर में जोड़ना चाहेंगे .. – gsamaras

1

मेरे मामले में, दो शीर्ष जवाब काम नहीं किया है, इस प्रकार मैं एक जवाब द्वारा जोड़ा जा रहा, डैन डैस्केलेस्कु की टिप्पणी को उजागर करना:

Object.keys(window); 

जब मैंने इसे मार डाला है, यह दिया:

शीर्ष, स्थान, दस्तावेज़, विंडो, बाहरी, क्रोम, $, jQuery, matchMedia, jQuery1113010234049730934203, match_exists, player_exists, add_me, isLetter, create_match, delete_me, प्रतीक्षा, अनिश्चित, ताज़ा करें, delete_match, jsfunction, check, set_global, autoheight , updateTextbox, update_match, update_player, alertify, Swal, sweetAlert, save_match, $ शरीर, value_or_null, खिलाड़ी, पी osition, क्षमता, obj_need_save, xxx_saves, previousActiveElement

जहां खिलाड़ी, स्थिति, क्षमता, obj_need_save, xx_saves मेरे वास्तविक वैश्विक चर रहे हैं।


मैं सिर्फ देखा कि वहां मौजूद एक और सवाल करने के लिए एक समान answer

संबंधित मुद्दे