2012-04-23 10 views
8

साथ चर नाम जाओ मैं कहाँ मैं इस तरह चर नाम सम्मिलित कर सकते हैं एक लॉग समारोह बनाना चाहते हैं:जावास्क्रिप्ट

var a = '123', 
    b = 'abc'; 

log([a, b]); 

और परिणाम console.log

a: 123 
b: abc 

में इस तरह दिखना चाहिए चर के मान प्राप्त करें कोई समस्या नहीं है लेकिन मैं चर नाम कैसे प्राप्त करूं? समारोह सामान्य होना चाहिए, इसलिए मैं हमेशा यह नहीं मान सकता कि दायरा खिड़की है।

+4

जावास्क्रिप्ट में यह संभव नहीं है क्योंकि आप इसे काम करना चाहते हैं। 'Var foo = bar = {}' जैसी चीज़ के साथ एक ही ऑब्जेक्ट को 2 नामों से संदर्भित किया जाता है, और यदि आप ऑब्जेक्ट को फ़ंक्शन में पास करते हैं तो फ़ंक्शन के अंदर से उस लुकअप को रिवर्स करने के लिए असंभव है और देखें कि कौन सा नाम इस्तेमाल करने के लिए उपयोग किया गया था इसमें – Gareth

+0

ठीक है तो मैं खोजना बंद कर सकता हूं। Thanx! – arpo

+0

इसके बजाय, आपको डीबगर का उपयोग करने का तरीका सीखना चाहिए। अपनी कंसोल.लॉग लाइन के बजाए डीबगर को केवल एक लाइन डालने से शुरू करें, और उसके बाद फ़ायरबग या क्रोम इंस्पेक्टर के साथ अपना कोड चलाएं – Gareth

उत्तर

6

तो तर्क चर की एक सरणी है क्या तुम कर सकते हो वस्तुओं का उपयोग करें या एक स्ट्रिंग के रूप में चर नाम से पारित है ? तो नहीं, मूल वैरिएबल नाम प्राप्त करने का कोई तरीका नहीं है जब इसे पारित किया जाए।

["123","abc"]; 

और ज्यादा कुछ नहीं


आप समारोह चर के नाम और गुंजाइश वे कर रहे हैं, की तरह प्रदान कर सकता है:

function log(arr,scope){ 
    for(var i=0;i<arr.length;i++){ 
     console.log(arr[i]+':'scope[arr[i]]); 
    } 
} 
प्राप्त अंत में, वे तो बस की तरह लग रहे

हालांकि, यदि आप भी दायरे दे सकते हैं तो यह समस्या में चलता है।

    nonstrict कार्यों के लिए
  • thisundefined
  • निर्माता कार्यों के लिए
  • है thiswindow
  • सख्त कार्यों के लिए
  • है, this निर्माण किया है: क्या this कुछ कोड के क्षेत्रों में है के मुद्दों का एक बहुत देखते हैं आपत्ति
  • एक वस्तु शाब्दिक भीतर, this तत्काल संलग्न वस्तु
है 210

ताकि आप this को एक दायरे के रूप में पारित करने पर भरोसा न करें। जब तक आप दायरा प्रदान नहीं कर सकते, यह एक और मृत अंत है।


अगर आप उन्हें एक वस्तु के रूप गुजरती हैं, तो आप वस्तु और उसके "कुंजी" और नहीं मूल चर नाम के माध्यम से पुनरावृति कर सकते हैं। हालांकि, इस मामले में इलाज से यह अधिक नुकसान है।

0

अगर यह वास्तव में जे एस में काम करेगा पता नहीं है ... लेकिन आप एक वस्तु है, जिसमें आप का नाम और मान स्टोर कर सकते हैं का उपयोग कर सकते हैं:

function MyLogObject(name, value) { 
    this.name = name; 
    this.value = value; 
    } 


    var log = []; 
    log.push(new MyLogObject('a', '123')); 
    log.push(new MyLogObject('b', 'abc')); 

    for each (var item in log) { 
    if (item.value != undefined) 
     alert(item.name + "/" + item.value);  
    } 

फिर इस वस्तु के माध्यम से आप कर सकते हैं पाश और आप नाम और मान

+0

कोई ऑब्जेक्ट वह नहीं है जिसे मैं ढूंढ रहा हूं। – arpo

0

प्राप्त कर सकते हैं आप एक ऐरे का उपयोग कर चर नामों तक नहीं पहुंच सकते हैं।

var x = 7; 
var y = 8; 

function logVars(arr){ 
    for(var i = 0; i < arr.length; i++){ 
     alert(arr[i] + " = " + window[arr[i]]); 
    } 
} 

logVars(["x","y"]); 
+0

* "फ़ंक्शन सामान्य होना चाहिए, इसलिए मैं हमेशा यह नहीं मान सकता कि दायरा खिड़की है।" * ओपी कहता है। – Joseph

+0

मुझे एक सरणी और वस्तु कार्य पता है। लेकिन मैं मुख्य स्ट्रोक को सहेजना चाहता हूं, ऊपर जवाब देखें। और मुझे लगता है कि दायरा खिड़की नहीं है। असल में मैं खिड़की के दायरे को जितना संभव हो उतना छोटा उपयोग करता हूं। – arpo

1

कुछ इस तरह करना होगा कि आप जो खोज रहे हैं:

function log(logDict) { 
    for (var item in logDict) { 
     console.log(item + ": " + logDict[item]); 
    } 
} 

function logSomeStuff() { 
    var dict = {}; 
    dict.a = "123"; 
    dict.b = "abc"; 
    log(dict); 
} 

logSomeStuff(); 
+0

मुझे पता है कि मैं किसी ऑब्जेक्ट का उपयोग कर सकता हूं। मैं क्या करना चाहता हूं जब मैं काम कर रहा हूं तो महत्वपूर्ण स्ट्रोक को सहेजना है। मैं जल्दी से देखना चाहता हूं कि चर का एक गुच्छा क्या है। अगर मुझे उन्हें किसी ऑब्जेक्ट में रखना है तो मुझे मुख्य स्ट्रोक मिलते हैं लेकिन किसी अन्य प्रकार का :) :) मैं टाइपिंग console.log ('a:' + a 'b:' + b) से थक गया हूं; और एक समारोह को संभालने के लिए चाहते हैं। – arpo

+0

उस स्थिति में, आप उन दायरे से संबंधित मुद्दों में भाग लेते हैं जिन्हें @ जोसेफ ने उनके जवाब में उल्लेख किया है। –

2

मुझे पता है कि आप कुछ कीस्ट्रोक को सहेजना चाहते हैं। मैं भी। हालांकि, मैं आमतौर पर परिवर्तनीय नाम और मूल्यों को लॉग करता हूं जैसे कि यहां दूसरों ने पहले से ही सुझाव दिया है।

console.log({a:a, b:b}); 

तुम सच में प्रारूप है कि आप पहले से ही सचित्र पसंद करते हैं, तो आप इसे इस तरह कर सकते हैं:

function log(o) { 
    var key; 
    for (key in o) { 
     console.log(key + ":", o[key]); 
    } 
} 

var a = '1243'; 
var b = 'qwre'; 
log({ 
    a:a, 
    b:b 
}); 

किसी भी तरह से, आप अपने प्रवेश अनुरोध करता है, तो में चर नाम शामिल करने के लिए आवश्यकता होगी तुम देखना चाहते हो। गैरेथ की तरह, कहा जाता है कि बुलाए गए कार्यों के अंदर से परिवर्तनीय नाम एक विकल्प नहीं है।

+0

हां शायद यह सबसे नज़दीक है जो मैं प्राप्त कर सकता हूं। – arpo

-2

इसका परीक्षण करें।

var variableA="valor01"; <br> 
var variableB="valor02"; 

var NamevariableA=eval('("variableA")');<br> 
var NamevariableB=eval('("variableB")');<br> 

console.log(NamevariableA,NamevariableB); 

एटीई। मैनुअल रेटामोजो Arrué

0

मुझे कुछ ऐसी ही समस्या थी, लेकिन विभिन्न कारणों से।

सबसे अच्छा समाधान मैं मिल सकता था:

MyArray = ["zero","one","two","three","four","five"]; 
MyArray.name="MyArray"; 

तो अगर: मेरी जरूरतों

X=="MyArray" 

जैसा कि मैंने कहा, यह उपयुक्त है, लेकिन यकीन नहीं:

x=MyArray.name; 
फिर

यह आपके लिए कैसे काम करेगा। मुझे मूर्खतापूर्ण लगता है कि मुझे इसकी भी आवश्यकता है, लेकिन मैंने किया।

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