ऑब्जेक्ट गुण तक नहीं पहुँच सकते, भले ही यह कंसोल लॉग में दिखाई दे


329

नीचे, आप इन दो लॉग से आउटपुट देख सकते हैं। पहला स्पष्ट रूप से उस ऑब्जेक्ट के साथ पूर्ण ऑब्जेक्ट दिखाता है जिसे मैं एक्सेस करने की कोशिश कर रहा हूं, लेकिन कोड की अगली पंक्ति में, मैं इसे config.col_id_3(स्क्रीनशॉट में "अपरिभाषित") के साथ एक्सेस नहीं कर सकता । क्या कोई इसे समझा सकता है? मुझे हर दूसरी प्रॉपर्टी के लिए भी एक्सेस मिल सकता है field_id_4

console.log(config);
console.log(config.col_id_3);

यह इन पंक्तियों को कंसोल में प्रिंट करता है

कंसोल आउटपुट


6
क्या आप console.log(JSON.stringify(config));ans o / p
अरुण पी जॉनी

2
यह भी कोशिश करें, यदि यह कंसोल काम करता है। (config ['col_id_3']);
zzlalani

5
यह मेरे लिए काम किया। कार्यशील वस्तु के लिए नए इनपुट के रूप में कड़े उत्पादन का उपयोग करना: JSON.parse (JSON.stringify (obj))
Tope

2
स्ट्रिंग करना और फिर पार्स करना मेरे लिए किसी कारण से समस्या का समाधान नहीं था। हालाँकि एकमुश्त पार्सिंग किया। JSON.parse(obj)
जैकबपरिसो

3
किसी कारण से सभी उत्तर बताते हैं कि कुंजी के बिना ऑब्जेक्ट को कैसे लॉग किया जाए, कुंजी को कैसे एक्सेस किया जाए
remidej

जवाबों:


296

का उत्पादन console.log(anObject)भ्रामक है; जब आप >कंसोल में विस्तार करते हैं , तो प्रदर्शित की गई वस्तु की स्थिति को हल कर दिया जाता है। यह वस्तु की स्थिति नहीं है जब आप console.logवस्तु को देखते हैं।

इसके बजाय, प्रयास करें console.log(Object.keys(config)), या यहां तक ​​कि console.log(JSON.stringify(config))और आप उस समय पर चाबियाँ, या ऑब्जेक्ट की स्थिति देखेंगे जिसे आपने कॉल किया था console.log

आप (आमतौर पर) पाते हैं कि आपके कॉल के बाद कुंजियाँ जोड़ी जा रही हैं console.log


11
क्या यह व्यवहार बग या सुविधा है? यदि यह एक विशेषता है, तो इसके पीछे तर्क क्या है?
ईएसआर

2
इसके आसपास कोई कैसे पहुंचता है? टाइमआउट सेट करना एक अच्छे समाधान की तरह प्रतीत नहीं होता है।
सहारा

9
फिर हम इस संपत्ति तक, वस्तु से कैसे पहुंच सकते हैं?
रोहित शर्मा

स्पष्ट करने के लिए, >क्या किसी सरणी का विस्तार किया जा रहा है, या किसी वस्तु के आधार पर बटन का व्यवहार अलग है?
फ्लिम

कुछ परीक्षण करते हुए, ऐसा लगता है कि आप इस मुद्दे पर एक सरणी के साथ भी आए हैं, इसलिए मैं इसके बजाय JSON.stringify करने की सलाह दूंगा।
फ्लिम

62

मैं सिर्फ Mongoose का उपयोग करते हुए MongoDB से लोड किए गए दस्तावेज़ के साथ इस मुद्दे पर आया हूं ।

जब console.log()पूरे ऑब्जेक्ट पर चल रहा हो , तो सभी डॉक्यूमेंट फील्ड (जैसा कि db में स्टोर किया गया है) दिखाई देगा। हालांकि कुछ व्यक्तिगत संपत्ति एक्सेसर्स वापस आ जाएंगे undefined, जब अन्य (सहित _id) ने ठीक काम किया।

पता चला कि संपत्ति accessors केवल मेरे में निर्दिष्ट की गई क्षेत्रों के लिए काम करता है mongoose.Schema(...)परिभाषा है, जबकि console.log()और JSON.stringify()रिटर्न सभी क्षेत्रों DB में संग्रहीत।

समाधान (यदि आप Mongoose का उपयोग कर रहे हैं) : सुनिश्चित करें कि आपके सभी db फ़ील्ड में परिभाषित किए गए हैं mongoose.Schema(...)


इस समस्या की महान व्याख्या, मुझे लगा कि मानसून मुझे एक स्कीमा (बाहरी स्क्रिप्ट में) के बिना जसन को क्वेरी करने देगा, लेकिन वह मुझे लिखना नहीं रोकेगा। यह काम करता प्रतीत होता है क्योंकि _id मौजूद है, और कंसोल.लॉग कहता है कि बाकी सब कुछ सुलभ होना चाहिए, लेकिन ऐसा नहीं है। विचित्र।
बस्ट

7
पता चलता है कि मैं यह देख रहा था क्योंकि JSON.stringify()(और नोड के console.log()) ने उनके व्यवहार को बदल दिया यदि दी गई वस्तु में कोई .toJSON()फ़ंक्शन है। जो आउटपुट आप देख रहे हैं, वह .toJSON()रिटर्न है, न कि मूल वस्तु। Mongoose आपको मॉडल ऑब्जेक्ट .toJSON()देता है जो कि अंतर्निहित db ऑब्जेक्ट देता है। मॉडल ऑब्जेक्ट में केवल उन फ़ील्ड्स के लिए एक्सेसर्स होते हैं जिन्हें आप स्कीमा में परिभाषित करते हैं, लेकिन तब सभी डीबी फ़ील्ड तब दिखाई देते हैं जब आप इसे लॉग इन करते हैं क्योंकि आप वास्तव में अंतर्निहित ऑब्जेक्ट को वापस लौटते हुए देख रहे हैं .toJSON()
रफ

अन्य गुणों को पढ़ने की अनुमति क्यों नहीं देता है क्या आपके पास कोई विचार है?
कन्नन टी

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

1
इसके लिए शुक्रिया। मैं इसे कंसोल में देखकर पागल हो रहा था और इसे एक्सेस नहीं कर पा रहा था। मेरे स्कीमा में मूल्य जोड़ा गया है और मैं जाने के लिए अच्छा हूं। एक बार फिर धन्यवाद!
alittletf

27

जाँचें कि क्या वस्तु के अंदर वस्तुओं की एक सरणी है। मैं एक JSON के साथ एक समान मुद्दा था:

    "terms": {
        "category": [
            {
                "ID": 4,
                "name": "Cirugia",
                "slug": "cirugia",
                "description": "",
                "taxonomy": "category",
                "parent": null,
                "count": 68,
                "link": "http://distritocuatro.mx/enarm/category/cirugia/"
            }
        ]
    }

मैंने 'नाम' कुंजी को 'श्रेणी' से एक्सेस करने की कोशिश की और मुझे अपरिभाषित त्रुटि मिली , क्योंकि मैं उपयोग कर रहा था:

var_name = obj_array.terms.category.name

तब मुझे एहसास हुआ कि इसे वर्ग कोष्ठक मिला है, इसका मतलब है कि इसमें श्रेणी कुंजी के अंदर वस्तुओं की एक सरणी है, क्योंकि इसमें किसी श्रेणी की वस्तु से अधिक हो सकता है। इसलिए, 'नाम' कुंजी प्राप्त करने के लिए मैंने इसका उपयोग किया:

var_name = obj_array.terms.category[0].name

और यह चाल है।

हो सकता है कि इस उत्तर के लिए बहुत देर हो चुकी हो, लेकिन मुझे उम्मीद है कि इस समस्या का हल किसी को मिल जाएगा, जैसा कि मैंने समाधान खोजने से पहले किया था :)


23

मेरी भी यही समस्या थी। मेरे लिए समाधान JSON को पार्स करने के लिए इनपुट के रूप में कड़े आउटपुट का उपयोग कर रहा था। यह मेरे लिए काम किया। आशा है कि यह आपके लिए उपयोगी है

var x =JSON.parse(JSON.stringify(obj));
console.log(x.property_actually_now_defined);

2
हाँ, यह काम किया, लेकिन इसकी आवश्यकता क्यों है? मेरे पास पहले से ही एक JSON है, मुझे ऐसा करने की आवश्यकता क्यों है?
जैन

@dilpeshjain मुझे बिल्कुल यकीन नहीं है, लेकिन मैं उद्यम करूंगा कि हमारे पास वास्तव में JSON पहले से नहीं है (शायद एक आलसी लोडिंग प्रकार का परिदृश्य चल रहा है, मैं उस समय इसके बारे में पर्याप्त जानकार नहीं हूं), लेकिन जो कुछ भी हमारे पास है उसे पारित करना JSON.stringify में एक स्ट्रिंग को वापस करने की आवश्यकता होती है (जैसे प्रिंटिंग के लिए कंसोल.लॉग कॉल की आवश्यकता)। क्योंकि मुझे पता है कि मैं कम से कम एक स्ट्रिंग प्राप्त कर सकता हूं, फिर मैं उस स्ट्रिंग का उपयोग कर सकता हूं ताकि निश्चित रूप से तुरंत JSON ऑब्जेक्ट बनाया जा सके।
टोपे

4
@ जैन आपको इसकी आवश्यकता है क्योंकि जावास्क्रिप्ट एक भयानक भाषा है

22

आप जिस संपत्ति तक पहुँचने की कोशिश कर रहे हैं वह अभी तक मौजूद नहीं हो सकती है। Console.log काम करता है क्योंकि यह एक छोटी सी देरी के बाद निष्पादित होता है, लेकिन यह आपके बाकी कोड के लिए ऐसा नहीं है। इसे इस्तेमाल करे:

var a = config.col_id_3;    //undefined

setTimeout(function()
{
    var a = config.col_id_3;    //voila!

}, 100);

1
मैंने अपने ऑब्जेक्ट वैल्यू पाने के लिए ऑनलोड विधि का इस्तेमाल किया। लेकिन अभी भी मुझे पहली बार अपरिभाषित है। यह भाषा मुझे दिन
Teoman Tıngır

एक आसान समाधान होगा एक चौकीदार वादा लागू करना जो यह जांचता है कि क्या वांछित संपत्ति को सेटटाइमआउट के साथ परिभाषित किया गया है, और संपत्ति उपलब्ध हो जाने के बाद टाइमआउट को हल करता है।
लाई ज़ू

वाह। अपने 15 वर्षों के वेब प्रोग्रामिंग में मैंने कभी भी इसका सामना नहीं किया था और कभी नहीं सोचा कि कंसोल लॉग कैसे काम करता है। आपके उत्तर से कुछ स्पष्ट होने में मदद मिली।
काई किंग

12

मेरे मामले में मैं एक वादा करने के लिए एक वस्तु पारित कर रहा था, वादे के भीतर मैं वस्तु में अधिक महत्वपूर्ण / मान जोड़ रहा था और जब यह किया गया तो वादा वस्तु वापस कर दिया।

हालाँकि, मेरी ओर से एक मामूली नज़र, यह वादा पूरी होने से पहले वस्तु को वापस कर रहा था ... इस प्रकार मेरे बाकी कोड अद्यतन वस्तु को संसाधित करने की कोशिश कर रहे थे और डेटा अभी तक नहीं था। लेकिन ऊपर की तरह, कंसोल में, मैंने ऑब्जेक्ट को पूरी तरह से अपडेट देखा, लेकिन चाबियों का उपयोग करने में सक्षम नहीं था - वे अपरिभाषित वापस आ रहे थे। जब तक मैंने यह नहीं देखा:

console.log(obj) ;
console.log(obj.newKey1) ;

// returned in console
> Object { origKey1: "blah", origKey2: "blah blah"} [i]
    origKey1: "blah"
    origKey2: "blah blah"
    newKey1: "this info"
    newKey2: "that info"
    newKey3: " more info"
> *undefined*

[I] एक छोटा आइकन है, जब मैंने इस पर हॉवर किया था Object value at left was snapshotted when logged, value below was evaluated just now। थॉट्स जब यह मेरे साथ हुआ था कि वादे को पूरी तरह से अपडेट करने से पहले मेरी वस्तु का मूल्यांकन किया जा रहा था।


10

मैं आज इस मुद्दे से जूझ रहा हूं, और मैंने सोचा कि मैं अपने समाधान के साथ उत्तर छोड़ दूंगा।

मैं ajax के माध्यम से एक डेटा ऑब्जेक्ट ला रहा था, कुछ इस तरह से: {"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}

मान लें कि यह ऑब्जेक्ट डेटा नामक एक चर में है। जब भी मैंने संदर्भित किया data.i18nमुझे मिला undefined

  1. console.log(data) उम्मीद के मुताबिक वस्तु दिखाई
  2. console.log(Object.keys(data))कहा ["constants","i18n"]अपेक्षा के अनुरूप
  3. अंतर करने के लिए i18n का नाम बदलना कुछ भी नहीं बदला
  4. मैंने "i18n" को पहली वस्तु बनाने के लिए डेटा को स्विच करने का भी प्रयास किया
  5. कोड पूरी तरह से सुनिश्चित करने के लिए चारों ओर ले जाया गया कि वस्तु पूरी तरह से सेट हो गई है और अजाक्स वादे के साथ कोई समस्या नहीं है।

कुछ भी मदद नहीं की ... फिर सर्वर की ओर से मैंने डेटा को php लॉग में लिखा, और यह पता चला:

{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}

सूचकांक कुंजी में "i" वास्तव में एक u0456 (सिरिलिक i) था। यह मेरे php एडिटर या ब्राउज़र कंसोल लॉग में दिखाई नहीं दे रहा था। केवल php लॉग ने यह खुलासा किया ... यह एक मुश्किल था ...


1
यह भी मेरा मुद्दा था; कुछ उदाहरणों में इसके बजाय एक सिरिलिक 'सी' वर्ण था। मुझे वह स्ट्रिंग मिली, जिसकी मुझे उम्मीद थी; संदिग्ध का चयन नहीं किया गया था, इसलिए मुझे बताया कि एक गलत चरित्र था जो आंख के लिए अदृश्य था।
नाइट

इस जवाब ने वास्तव में मुझे अपना समाधान खोजने में मदद की। मेरा मुद्दा यह था कि मैंने अपने चर नाम को गलत रखा था। मैंने "अपडेट" लोल के बजाय "यूडपेट" किया
सैवलॉन

8

मेरा डेटा सिर्फ json डेटा स्ट्रिंग था। (यह चर सत्र में json string के रूप में संग्रहीत किया गया था)।

console.log(json_string_object)

-> इस स्ट्रिंग का केवल प्रतिनिधित्व करता है और यह अंतर करने का कोई तरीका नहीं है कि क्या स्ट्रिंग या ऑब्जेक्ट है।

इसलिए इसे काम करने के लिए मुझे इसे वास्तविक वस्तु में बदलने की आवश्यकता है:

object = JSON.parse(json_string_object);

यह एकमात्र उत्तर था जो मेरे लिए काम करता था और मूल प्रश्न की टिप्पणियों में भी वर्णित है, यह अधिक होना चाहिए।
अबघ0703

5

2018 में मोज़िला ने हमें मोज़िला डॉक्स में चेतावनी दी है !

मैं बोली "लॉगिंग ऑब्जेक्ट्स" :

उपयोग न करें console.log(obj);, उपयोग करें console.log(JSON.parse(JSON.stringify(obj)));

इस तरह से आप सुनिश्चित हैं कि आप इसे लॉग इन करने के समय obj का मूल्य देख रहे हैं।


4

यह किसी की मदद कर सकता है क्योंकि मेरे पास एक समान मुद्दा था जिसमें JSON.parse () एक ऑब्जेक्ट लौटा रहा था जिसे मैं कंसोल पर प्रिंट कर सकता था। () लेकिन मैं विशिष्ट क्षेत्रों को एक्सेप्ट नहीं कर सका और उपरोक्त समाधान में से किसी ने भी काम नहीं किया। मुझे। जैसे JSON.stringify () के साथ JSON.parse () के संयोजन का उपयोग करना।

var jsonObj = JSON.parse(JSON.stringify(responseText))

// where responseText is a JSON String returned by the server.

console.log(jsonObj) ///Was printing the object correctly
console.log(jsonObj.Body) /// Was printing Undefined  

मैंने ExtJs Ext.decode () द्वारा प्रदान किए गए एक अलग पार्सर का उपयोग करके समस्या को हल किया;

var jsonObj = Ext.decode(responseText)
console.log(jsonObj.Body) //Worked...

2

मेरे मामले में, यह सिर्फ ऐसा होता है कि भले ही मुझे किसी मॉडल के प्रारूप में डेटा प्राप्त होता है, myMethod(data:MyModelClass) जब तक कि प्राप्त वस्तु प्रकार स्ट्रिंग की नहीं थी। जो कि कंसोल.लॉग (डेटा) में y है, मुझे सामग्री मिलती है। समाधान सिर्फ JSON को पार्स करने के लिए है (मेरे मामले में)

const model:MyMOdelClass=JSON.parse(data);

सोचा उपयोगी हो सकता है।


2

मुझे इस समस्या का सामना सीएसवी फ़ाइल से सीएसवी फ़ाइल द्वारा उत्पन्न सीएसवी फ़ाइल से उत्पन्न वस्तुओं के साथ करना पड़ा। मैं पहली प्रॉपर्टी को छोड़कर सभी प्रॉपर्टी को एक्सेस करने में सक्षम था - लेकिन अगर मैं कंसोल का उपयोग करके पूरी ऑब्जेक्ट लिखता हूं तो यह ठीक दिखाई देगा।

यह पता चला कि UTF-8 CSV प्रारूप एक अदृश्य चरित्र के अनुरूप प्रारंभ में 3 बाइट्स (ef bb bf) सम्मिलित करता है - जिसे csv-parser द्वारा पहले संपत्ति शीर्षलेख के भाग के रूप में शामिल किया जा रहा था। समाधान गैर-यूटीएफ विकल्प का उपयोग करके सीएसवी को फिर से उत्पन्न करना था और इससे अदृश्य चरित्र समाप्त हो गया।


आप एक नायक हो! इसे पोस्ट करने के लिए धन्यवाद। मैं अपने बाल खींच रहा था।
जॉर्डन एस

इसे पोस्ट करने के लिए फिर से धन्यवाद! मेरी रात बच गई!
ओलिवर हिकमैन

2

मेरे पास इसी तरह का मुद्दा है, आशा है कि निम्नलिखित समाधान किसी की मदद करेंगे।
आप setTimeoutकुछ लोगों के सुझाव के रूप में फ़ंक्शन का उपयोग कर सकते हैं , लेकिन आप कभी नहीं जानते कि आपके ब्राउज़र को आपकी वस्तु को परिभाषित करने के लिए कितनी देर तक चलने की आवश्यकता है।

इसमें से मैं setIntervalइसके बजाय फ़ंक्शन का उपयोग करने का सुझाव दूंगा। यह तब तक प्रतीक्षा करेगा जब तक कि आपकी वस्तु config.col_id_3परिभाषित नहीं हो जाती है और फिर आपके अगले कोड भाग को आग लगा दी जाती है जिसे आपके विशिष्ट ऑब्जेक्ट गुणों की आवश्यकता होती है।

window.addEventListener('load', function(){

    var fileInterval = setInterval(function() {
        if (typeof config.col_id_3 !== 'undefined') {

            // do your stuff here

            clearInterval(fileInterval); // clear interval
        }
    }, 100); // check every 100ms

});

2

यदि आप उपयोग कर रहे हैं TYPESCRIPTऔर / या ANGULAR, यह हो सकता है!

.then((res: any) => res.json())

मेरे लिए किसी भी प्रकार की प्रतिक्रिया के लिए इस प्रकार की प्रतिक्रिया सेट करना , मैं रेस पर गुणों का उपयोग नहीं कर सकता जब तक कि मैं रेस सेट नहीं करता : कोई भी

इस प्रश्न को देखें संपत्ति '_body' टाइप 'रेस्पॉन्स' पर मौजूद नहीं है


1

मेरे पास एक ही मुद्दा था और ऊपर दिए गए किसी भी समाधान ने मेरे लिए काम नहीं किया और इसके बाद यह अनुमान लगाया गया कि यह अनुमान लगाने जैसा काम है। हालांकि, मेरे कोड को लपेटकर जो एक setTimeoutफ़ंक्शन में ऑब्जेक्ट बनाता है, मेरे लिए चाल चली।

setTimeout(function() {
   var myObj = xyz; //some code for creation of complex object like above
   console.log(myObj); // this works
   console.log(myObj.propertyName); // this works too
});

1

मेरे पास एक समान मुद्दा था या शायद सिर्फ संबंधित था।

मेरे मामले के लिए मैं एक वस्तु के गुणों तक पहुँच रहा था लेकिन एक अपरिभाषित था। मैंने पाया कि सर्वर की साइड कोड में ऑब्जेक्ट की वैल बनाते समय समस्या सफेद जगह में थी।

मेरा दृष्टिकोण इस प्रकार था ...

मेरी वस्तु बनाने ... "शब्द" में सफेद-स्थान पर ध्यान दें

प्रतिक्रिया मुझे मेरे REST API से मिलती है

मानों को लॉग करने के लिए जावास्क्रिप्ट कोड

कंसोल से लॉग परिणाम

ऑब्जेक्ट बनाने वाले सर्वर-साइड कोड से सफेद-स्थान को हटाने के बाद, मैं अब नीचे संपत्ति तक पहुंच सकता हूं ...

व्हाट्सएप हटाने के बाद परिणाम

यह विषय के प्रश्न के मामले के साथ मुद्दा नहीं हो सकता है, लेकिन मेरे मामले के लिए था और कुछ अन्य के लिए ऐसा हो सकता है। आशा है ये मदद करेगा।


1

मैं सिर्फ Mongoose का उपयोग करते हुए MongoDB से लोड किए गए दस्तावेज़ के साथ एक ही मुद्दा था।

यह पता चला कि मैं संपत्ति का उपयोग करके find()सिर्फ एक वस्तु वापस कर रहा हूं , इसलिए मैं बदल find()गया findOne()और मेरे लिए सब कुछ काम कर गया।

समाधान (यदि आप Mongoose का उपयोग कर रहे हैं): केवल एक ही वस्तु वापस करना सुनिश्चित करें, ताकि आप उसे पार्स कर सकें object.idया इसे एक सरणी के रूप में माना जाएगा ताकि आपको इसे पसंद करने की आवश्यकता हो object[0].id


1

मेरे लिए यह एक मानस-संबंधी समस्या थी।

मैं उन वस्तुओं पर लूप कर रहा था जो मुझे एक मोंगो क्वेरी से मिली थीं। मुझे बस हटाना था:

items = await Model.find()

और इसे द्वारा प्रतिस्थापित करें:

items = await Model.find().lean()

0

मेरे पास इस तरह का एक मुद्दा था, और पाया गया कि समाधान अंडरस्कोर.जे के साथ करना था। मेरे शुरुआती लॉगिंग का कोई मतलब नहीं था:

console.log(JSON.stringify(obj, null, 2));

> {
>   "code": "foo"
> }

console.log(obj.code);

> undefined

मैंने वस्तु की कुंजियों को देख कर इसका हल खोजा:

console.log(JSON.stringify(Object.keys(obj)));

> ["_wrapped","_chain"]

इससे मुझे एहसास हुआ कि objवास्तव में एक वस्तु के आसपास एक अंडरस्कोर.जेएस आवरण था, और प्रारंभिक डिबगिंग मेरे पास पड़ा था।


0

मुझे भी इसी तरह की समस्या थी (सुगरसीआरएम के लिए विकसित होने पर), जहां मैं शुरू करता हूं:

var leadBean = app.data.createBean('Leads', {id: this.model.attributes.parent_id});

// This should load object with attributes 
leadBean.fetch();

// Here were my attributes filled in with proper values including name
console.log(leadBean);

// Printed "undefined"
console.log(leadBean.attributes.name);

समस्या यह थी कि fetch()इसका एसिंक्स कॉल था इसलिए मुझे अपना कोड फिर से लिखना पड़ा:

var leadBean = app.data.createBean('Leads', {id: this.model.attributes.parent_id});

// This should load object with attributes 
leadBean.fetch({
    success: function (lead) {
        // Printed my value correctly
        console.log(lead.attributes.name);
    }
});

0

बस अगर यह किसी के लिए सहायक होता है, तो मुझे एक समान समस्या थी, और यह इसलिए है क्योंकि किसी ने मेरे साथ काम कर रहे ऑब्जेक्ट में .toJSON के लिए एक ओवरराइड बनाया था। तो वस्तु कुछ इस तरह थी:

{
  foo: {
         bar: "Hello"
         baz: "World"
       }
}

लेकिन .JSON () था:

toJSON() {
  return this.foo
}

इसलिए जब मैंने JSON.stringify (myObject) को कॉल किया तो यह "{" बार ":" हैलो "," बाज ":" वर्ल्ड "} वापस आ गया। हालाँकि, Object.keys (myObject) ने "फू" का खुलासा किया।


toJson()यह वह बिंदु है जिसका यहां किसी ने उल्लेख नहीं किया है। मुझे नहीं पता कि यह जवाब क्यों नहीं दिया गया क्योंकि यह एक ऐसी वस्तु बनाने का एक तरीका है जिसका एक अलग मूल्य है, जो कि json या कंसोल प्रतिनिधित्व है। मुझे नहीं पता था कि इसका अस्तित्व तब तक है जब तक कि मैं इसे एक अलग उत्तर में उजागर नहीं करता, और मुझे लगता है कि इस उत्तर को रद्द कर दिया जाना चाहिए क्योंकि यह इस प्रकार के मुद्दों पर विचार करने के लिए एक बिंदु है।
रिक लव

जवाबों की संख्या को ध्यान में रखते हुए, जो बिल्कुल 0 अंक हैं, मुझे लगता है कि कोई व्यक्ति बस सब कुछ नीचे चला गया।
emote_control

0

मैंने आज उसी समस्या का सामना किया। मेरे मामले में चाबियाँ नेस्टेड थीं, यानी key1.key2। मैंने स्प्लिट () का उपयोग करके कुंजियों को विभाजित किया और फिर स्क्वायर ब्रैकेट नोटेशन का उपयोग किया, जिसने मेरे लिए काम किया।

var data = {
    key1: {
          key2: "some value"
       }
}

मैंने कुंजियों को विभाजित किया और इसे इस तरह से उपयोग किया, डेटा [key1] [key2] जिसने मेरे लिए काम किया।


0

मेरा आज भी यही मुद्दा था। समस्या बदसूरत-जेएस के कारण हुई। जब मैंने एक ही गैर-अछूता कोड समस्या निष्पादित की, तब हल किया गया था। का निकालना

--mangle-props

uglify-js से काम करने के लिए पर्याप्त था uglify कोड।

शायद, सबसे अच्छा अभ्यास गुणों के लिए कुछ उपसर्ग का उपयोग करना है जो कि कुरूपि-जेएस के लिए रेगेक्स नियम के साथ मंगाई गई है।

यहाँ स्रोत है:

var data = JSON.parse( content);
...
this.pageIndex = parseInt(data.index);
this.pageTotal = parseInt(data.total);
this.pageLimit = parseInt(data.limit); 

और यहां बताया गया है कि यह कैसे कुरूप था:

var n = JSON.parse( t);
...
this._ = parseInt(n.index), this.g = parseInt(n.total), this.D = parseInt(n.C)

0

JSON के किसी भी स्ट्रिंग / पार्स ने मेरे लिए काम नहीं किया।

formValues.myKey:               undefined
formValues.myKey with timeout:  content

मैं चाहता था कि मूल्य formValues.myKeyक्या था और नीचे दिए उदाहरण में ट्रिक 0 सेटटाउट था। आशा है ये मदद करेगा।

console.log('formValues.myKey: ',formValues.myKey);
setTimeout( () => { 
  console.log('formValues.myKey with timeout: ', formValues.myKey);
}, 0 );

0

मुझे बस इस मुद्दे का सामना करना पड़ा, और लंबी कहानी छोटी मेरी एपीआई एक स्ट्रिंग प्रकार लौटा रही थी और जेएसएन नहीं। तो यह बिल्कुल वैसा ही दिखता था जब आप इसे लॉग में प्रिंट करते थे लेकिन जब भी मैंने उन संपत्तियों तक पहुंचने की कोशिश की, तो इससे मुझे एक अपरिभाषित त्रुटि मिली।

एपीआई कोड:

     var response = JsonConvert.DeserializeObject<StatusResult>(string Of object);
     return Json(response);

पहले मैं लौट रहा था:

return Json(string Of object);

0

मैं आज भी इसी तरह का मुद्दा रिएक्ट में था। आखिरकार एहसास हुआ कि समस्या राज्य द्वारा अभी तक सेट नहीं किए जाने के कारण हो रही थी। मैं कॉल कर रहा था user.user.nameऔर यद्यपि यह कंसोल में दिखाई दे रहा था, मैं इसे अपने कंपोनेंट में एक्सेस नहीं कर सकता था जब तक कि मैं यह जांचने के लिए एक चेक शामिल नहीं करता कि user.userक्या सेट किया गया था और फिर कॉल कर रहा था user.user.name

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.