ไม่สามารถเข้าถึงคุณสมบัติวัตถุแม้ว่าจะปรากฏในบันทึกของคอนโซล


329

ด้านล่างคุณสามารถดูผลลัพธ์จากบันทึกทั้งสองนี้ สิ่งแรกแสดงให้เห็นอย่างชัดเจนว่าวัตถุเต็มพร้อมคุณสมบัติที่ฉันพยายามเข้าถึง แต่ในบรรทัดถัดไปของรหัสฉันไม่สามารถเข้าถึงได้ด้วยconfig.col_id_3(ดู "ไม่ได้กำหนด" ในภาพหน้าจอ?) มีใครอธิบายเรื่องนี้ได้บ้าง ฉันสามารถเข้าถึงทรัพย์สินอื่นได้ทุกแห่งยกเว้นfield_id_4เช่นกัน

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

นี่คือสิ่งที่บรรทัดเหล่านี้พิมพ์ใน Console

เอาต์พุตคอนโซล


6
คุณลองใช้console.log(JSON.stringify(config));ans แชร์ o / p ได้ไหม
อรุณ P Johny

2
ลองวิธีนี้เช่นกันถ้ามันทำงานได้ console.log (config ['col_id_3']);
zzlalani

5
สิ่งนี้ใช้ได้สำหรับฉัน ใช้เอาต์พุตที่ถูกทำให้เป็นสตริงเป็นอินพุตใหม่สำหรับอ็อบเจ็กต์ที่ใช้งานได้: JSON.parse (JSON.stringify (obj))
Tope

2
การระบุสตริงและการวิเคราะห์คำไม่สามารถแก้ปัญหาให้ฉันได้ด้วยเหตุผลบางอย่าง อย่างไรก็ตามการแยกวิเคราะห์ทันทีทำ JSON.parse(obj)
JacobPariseau

3
ด้วยเหตุผลบางอย่างคำตอบทั้งหมดจะอธิบายวิธีการบันทึกวัตถุโดยไม่ใช้กุญแจไม่ใช่วิธีการเข้าถึงกุญแจ
remidej

คำตอบ:


296

ผลลัพธ์ของการconsole.log(anObject)เข้าใจผิดนั้น สถานะของวัตถุที่แสดงจะแก้ไขได้เมื่อคุณขยาย>ในคอนโซลเท่านั้น มันไม่ได้เป็นสถานะของวัตถุเมื่อคุณconsole.logวัตถุ

แต่พยายามconsole.log(Object.keys(config))หรือแม้กระทั่งและคุณจะเห็นปุ่มหรือสถานะของวัตถุในเวลาที่คุณเรียกว่าconsole.log(JSON.stringify(config))console.log

คุณจะ (ปกติ) จะพบว่ามีการเพิ่มกุญแจหลังจากการconsole.logโทรของคุณ


11
พฤติกรรมนี้เป็นข้อบกพร่องหรือคุณสมบัติหรือไม่? หากเป็นฟีเจอร์อะไรคือเหตุผลที่อยู่เบื้องหลัง
ESR

2
แล้วจะมีวิธีแก้ไขอย่างไร การตั้งค่าการหมดเวลาดูเหมือนว่าจะไม่ใช่ทางออกที่ดี
Sahand

9
ถ้าอย่างนั้นเราจะสามารถเข้าถึงคุณสมบัตินี้จากวัตถุได้อย่างไร
Rohit Sharma

ในการชี้แจงลักษณะการทำงานของ>ปุ่มนั้นแตกต่างกันไปขึ้นอยู่กับว่ามีการขยายอาร์เรย์หรือวัตถุหรือไม่?
Flimm

ทำการทดสอบบางอย่างดูเหมือนว่าคุณได้พบปัญหานี้แม้จะมีอาร์เรย์ดังนั้นฉันขอแนะนำให้ทำ JSON.stringify แทน
Flimm

62

ฉันก็มีปัญหานี้กับเอกสารโหลดจาก MongoDB ใช้พังพอน

เมื่อเรียกใช้console.log()บนวัตถุทั้งหมดเขตข้อมูลเอกสารทั้งหมด (ตามที่เก็บไว้ในฐานข้อมูล) จะปรากฏขึ้น อย่างไรก็ตามผู้เข้าถึงอสังหาริมทรัพย์บางรายจะกลับมาundefinedเมื่อคนอื่น ๆ (รวมถึง_id) ทำงานได้ดี

ปรากฎว่า accessors คุณสมบัติใช้งานได้เฉพาะกับเขตข้อมูลที่ระบุไว้ในmongoose.Schema(...)คำจำกัดความของฉันในขณะที่console.log()และJSON.stringify()ส่งกลับเขตข้อมูลทั้งหมดที่เก็บไว้ใน db

วิธีแก้ปัญหา (ถ้าคุณใช้ Mongoose) : ตรวจสอบให้แน่ใจว่าได้กำหนดเขตข้อมูล db ทั้งหมดของคุณmongoose.Schema(...)แล้ว


คำอธิบายที่ดีของปัญหานี้ฉันคิดว่า Mongoose จะให้ฉันสอบถาม json โดยไม่มี schema (ในสคริปต์ภายนอก) แต่จะป้องกันการเขียน ดูเหมือนว่าจะทำงานได้เพราะมี _id อยู่และ console.log บอกว่าทุกอย่างอื่นควรเข้าถึงได้ แต่ไม่ใช่ แปลกประหลาด
bstar

7
ปรากฎว่าฉันเห็นสิ่งนี้เพราะJSON.stringify()(และโหนดconsole.log()) เปลี่ยนพฤติกรรมของพวกเขาหากวัตถุที่กำหนดมี.toJSON()ฟังก์ชั่น ผลลัพธ์ที่คุณเห็นคือสิ่งที่.toJSON()ส่งคืนไม่ใช่วัตถุดั้งเดิม Mongoose ให้วัตถุจำลองแก่คุณด้วยวัตถุ.toJSON()ที่ให้ฐานข้อมูลต้นแบบ วัตถุต้นแบบมีเพียง accessors สำหรับเขตข้อมูลที่คุณกำหนดใน schema แต่จากนั้นเขตข้อมูล db ทั้งหมดจะปรากฏขึ้นเมื่อคุณเข้าสู่ระบบเพราะคุณเห็นวัตถุต้นแบบที่ส่งคืนโดย.toJSON()จริง
ramin

ทำไมพังพอนไม่อนุญาตให้อ่านคุณสมบัติอื่น ๆ คุณมีความคิดใด ๆ
Kannan T

สิ่งนี้มีประโยชน์สำหรับฉันเมื่ออัปโหลด CSV ลงใน mongodb และดึงข้อมูลคุณสมบัติ ตรวจสอบว่าชื่อของคุณตรงกัน คำตอบที่ดีขอบคุณ
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/"
            }
        ]
    }

ฉันพยายามเข้าถึงคีย์ 'name' จาก 'category' และฉันพบข้อผิดพลาดที่ไม่ได้กำหนดเนื่องจากฉันใช้:

var_name = obj_array.terms.category.name

จากนั้นฉันก็รู้ว่ามันมีวงเล็บเหลี่ยมซึ่งหมายความว่ามันมีอาร์เรย์ของวัตถุภายในคีย์หมวดหมู่เพราะมันสามารถมีวัตถุประเภทมากกว่าหนึ่ง ดังนั้นเพื่อรับคีย์ '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 แล้วทำไมต้องทำเช่นนี้
jain

@dilpeshjain ฉันไม่แน่ใจเหมือนกัน แต่ฉันจะกล้าที่เราไม่ได้มี JSON จริง ๆ แล้ว (อาจจะมีสถานการณ์แบบขี้เกียจโหลดเกิดขึ้นฉันไม่รู้ในขณะนั้น) แต่ผ่านสิ่งที่เรามี ใน JSON.stringify ต้องใช้สตริงที่จะส่งคืน (เช่นความต้องการการเรียก console.log สำหรับการพิมพ์) เพราะฉันรู้ว่าอย่างน้อยฉันจะได้รับสตริงจากนั้นฉันสามารถใช้สตริงนั้นเพื่อสร้างวัตถุ JSON ได้ทันที
Tope

4
@jain คุณต้องการสิ่งนี้เพราะ javascript เป็นภาษาที่น่ากลัว

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

วิธีแก้ปัญหาที่ง่ายคือการนำสัญญาผู้เฝ้าดูมาใช้เพื่อตรวจสอบว่าคุณสมบัติที่ต้องการถูกกำหนดด้วย setTimeout และแก้ไข + ลบการหมดเวลาเมื่อทรัพย์สินพร้อมใช้งาน
Lai Xue

ว้าว. ในการเขียนโปรแกรมเว็บ 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

ฉันต่อสู้กับปัญหานี้ในวันนี้และคิดว่าฉันจะทิ้งคำตอบไว้ด้วยการแก้ปัญหาของฉัน

ฉันดึงข้อมูลวัตถุผ่านอาแจ็กซ์แบบนี้: {"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}

สมมุติว่าวัตถุนี้อยู่ในตัวแปรที่เรียกว่า data เมื่อใดก็ตามที่ผมอ้างถึงผมได้data.i18nundefined

  1. console.log(data) แสดงวัตถุตามที่คาดไว้
  2. console.log(Object.keys(data))พูด["constants","i18n"]ตามคาด
  3. การเปลี่ยนชื่อi18nเป็นinterไม่เปลี่ยนแปลงอะไรเลย
  4. ฉันยังพยายามเปลี่ยนข้อมูลเพื่อให้ "i18n" เป็นวัตถุแรก
  5. ย้ายรหัสไปรอบ ๆ เพื่อให้แน่ใจว่าวัตถุถูกตั้งค่าอย่างสมบูรณ์และไม่มีปัญหากับสัญญา ajax

ไม่มีอะไรช่วย ... จากนั้นที่ฝั่งเซิร์ฟเวอร์ฉันเขียนข้อมูลลงในไฟล์บันทึก php และมันเปิดเผยสิ่งนี้:

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

"i" ในคีย์ดัชนีนั้นแท้จริงแล้วคือ u0456 (cyrillic i) สิ่งนี้ไม่ปรากฏในตัวแก้ไข php หรือบันทึกคอนโซลของเบราว์เซอร์ มีเพียงบันทึก php ที่เปิดเผยสิ่งนี้ ... นั่นเป็นสิ่งที่ยุ่งยาก ...


1
นี่ก็เป็นปัญหาของฉันเช่นกัน มีอักขระ Cyrillic 'c' แทนในบางกรณี ฉันพบมันโดยค้นหาไฟล์ของฉันสำหรับสตริงที่ฉันคาดไว้; ไม่ได้เลือกอันน่าสงสัยดังนั้นจึงบอกฉันว่ามีตัวละครที่ไม่ถูกต้องที่มองไม่เห็นด้วยตา
อัศวิน

คำตอบนี้ช่วยให้ฉันหาทางออกได้จริง ปัญหาของฉันคือฉันสะกดชื่อตัวแปรผิด ฉันทำ "udpate" แทน "update" lol
Savlon

8

ข้อมูลของฉันเป็นเพียงสตริงข้อมูล json (ตัวแปรนี้ถูกจัดเก็บเป็นสตริง json ในเซสชัน)

console.log(json_string_object)

-> ส่งคืนเพียงการแสดงของสตริงนี้และไม่มีทางสร้างความแตกต่างไม่ว่าจะเป็นสตริงหรือวัตถุ

ดังนั้นเพื่อให้มันทำงานได้ฉันแค่ต้องการแปลงกลับเป็นวัตถุจริง:

object = JSON.parse(json_string_object);

นี่เป็นคำตอบเดียวที่ได้ผลสำหรับฉันและยังถูกกล่าวถึงในความคิดเห็นของคำถามเดิมซึ่งควรจะสูงกว่านี้
abagh0703

5

ในปี 2018 Mozilla เตือนเราในMozilla Docs ที่นี่ !

ฉันพูด"วัตถุการบันทึก" :

อย่าใช้console.log(obj);,console.log(JSON.parse(JSON.stringify(obj)));การใช้งาน

วิธีนี้คุณจะแน่ใจว่าคุณเห็นคุณค่าของ obj ในขณะที่คุณเข้าสู่ระบบ


4

สิ่งนี้อาจช่วยให้ใครบางคนเมื่อฉันมีปัญหาที่คล้ายกันซึ่ง JSON.parse () ส่งคืนวัตถุที่ฉันสามารถพิมพ์บน console.log () แต่ฉันไม่สามารถเพิ่มฟิลด์ที่เฉพาะเจาะจงและไม่มีวิธีการแก้ปัญหาข้างต้นทำงานได้ ผม. ชอบใช้การรวมกันของ JSON.parse () กับ JSON.stringify ()

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) วัตถุจนกระทั่งวัตถุที่ได้รับเป็นประเภทสตริง ฉันพบเนื้อหาใน console.log (data) ใด ทางออกคือการแยก JSON (ในกรณีของฉัน)

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

ความคิดอาจมีประโยชน์


2

ฉันเพิ่งพบปัญหานี้กับวัตถุที่สร้างโดย csv-parser จากไฟล์ CSV ที่สร้างโดย MS Excel ฉันสามารถเข้าถึงคุณสมบัติทั้งหมดยกเว้นคุณสมบัติแรก - แต่มันจะปรากฏขึ้นตกลงถ้าฉันเขียนวัตถุทั้งหมดโดยใช้ console.log

ปรากฎว่ารูปแบบ UTF-8 CSV แทรก 3 ไบต์ (ef bb bf) ที่จุดเริ่มต้นที่สอดคล้องกับอักขระที่มองไม่เห็น - ซึ่งถูกรวมไว้เป็นส่วนหนึ่งของส่วนหัวคุณสมบัติแรกโดย csv-parser วิธีแก้ไขคือสร้าง CSV อีกครั้งโดยใช้ตัวเลือกที่ไม่ใช่ UTF และสิ่งนี้จะช่วยขจัดอักขระที่มองไม่เห็น


คุณเป็นฮีโร่! ขอขอบคุณที่โพสต์สิ่งนี้ ฉันดึงผมออกมา
Jordan S

ขอขอบคุณอีกครั้งที่โพสต์สิ่งนี้! บันทึกคืนของฉัน!
Oliver Hickman

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())

การตั้งค่าประเภทการตอบสนองต่อใด ๆแก้ไขปัญหานี้สำหรับฉันฉันไม่สามารถเข้าถึงคุณสมบัติในการตอบสนองจน i ตั้งค่าความละเอียด: ใด ๆ

ดูคำถามนี้คุณสมบัติ '_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

ฉันมีปัญหาที่คล้ายกันหรืออาจเกี่ยวข้องกัน

สำหรับกรณีของฉันฉันกำลังเข้าถึงคุณสมบัติของวัตถุ แต่ยังไม่ได้กำหนด ฉันพบปัญหาคือพื้นที่สีขาวในโค้ดฝั่งเซิร์ฟเวอร์ขณะสร้างคีย์ val ของวัตถุ

แนวทางของฉันมีดังนี้ ...

การสร้างวัตถุของฉัน ... สังเกตช่องว่างใน "คำ"

ฉันได้รับจาก REST API

รหัสจาวาสคริปต์ในการบันทึกค่า

บันทึกผลลัพธ์จากคอนโซล

หลังจากลบ white-space ออกจากโค้ดฝั่งเซิร์ฟเวอร์ที่สร้างออบเจกต์แล้วฉันสามารถเข้าถึงคุณสมบัติได้ดังนี้ ...

ผลลัพธ์หลังจากลบช่องว่าง

นี่อาจไม่เป็นปัญหากับกรณีของคำถามหัวข้อ แต่เป็นสำหรับกรณีของฉันและอาจเป็นเช่นนั้นสำหรับคนอื่น หวังว่ามันจะช่วย


1

ฉันเพิ่งพบปัญหาเดียวกันกับเอกสารที่โหลดจาก MongoDB โดยใช้ Mongoose

กลายเป็นว่าฉันกำลังใช้คุณสมบัติfind()เพื่อส่งคืนวัตถุหนึ่งชิ้นดังนั้นฉันจึงเปลี่ยน find()เป็นfindOne()และทุกอย่างทำงานได้สำหรับฉัน

วิธีการแก้ปัญหา (ถ้าคุณกำลังใช้พังพอน): ตรวจสอบให้แน่ใจว่าจะกลับวัตถุหนึ่งเพียงเพื่อให้คุณสามารถแยกมันobject.idหรือมันจะได้รับการปฏิบัติเป็นอาร์เรย์ดังนั้นคุณต้อง acces object[0].idมันเหมือนว่า


1

สำหรับฉันมันกลายเป็นปัญหาที่เกี่ยวกับพังพอน

ฉันวนลูปมากกว่าวัตถุที่ฉันได้รับจากการสอบถาม Mongo ฉันต้องลบ:

items = await Model.find()

และแทนที่ด้วย:

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

0

ฉันมีปัญหาเช่นนี้และพบวิธีแก้ปัญหาสำหรับ Underscore.js การบันทึกครั้งแรกของฉันไม่สมเหตุสมผล:

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

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

console.log(obj.code);

> undefined

ฉันพบวิธีแก้ปัญหาโดยดูที่ปุ่มของวัตถุ:

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

> ["_wrapped","_chain"]

สิ่งนี้ทำให้ฉันรู้ว่าobjจริง ๆ แล้วเป็นเสื้อคลุม Underscore.js รอบ ๆ วัตถุและการดีบักเริ่มต้นกำลังโกหกฉัน


0

ฉันมีปัญหาที่คล้ายกัน (เมื่อพัฒนาเพื่อ SugarCRM) ซึ่งฉันเริ่มต้นด้วย:

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()การโทรแบบ async ของมันดังนั้นฉันต้องเขียนรหัสใหม่ลงใน:

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"
       }
}

แต่. toJSON () คือ:

toJSON() {
  return this.foo
}

ดังนั้นเมื่อฉันเรียก JSON.stringify (myObject) มันส่งคืน "{" bar ":" Hello "," baz ":" World "}" อย่างไรก็ตาม Object.keys (myObject) เปิดเผย "foo"


toJson()นี่คือจุดที่ไม่มีใครพูดถึงที่นี่ ฉันไม่รู้ว่าทำไมคำตอบนี้จึงลดลงเนื่องจากเป็นวิธีการสร้างวัตถุที่มีค่าแตกต่างจากการแสดง json หรือคอนโซล ฉันไม่รู้ว่ามันมีอยู่จริงจนกว่าฉันจะค้นพบมันในคำตอบที่ต่างออกไปและฉันคิดว่าคำตอบนี้ควรได้รับการอัปเดตเนื่องจากเป็นประเด็นที่ควรพิจารณาเกี่ยวกับปัญหาประเภทนี้
Rick Love

เมื่อพิจารณาถึงจำนวนคำตอบที่มี 0 คะแนนอย่างแน่นอนฉันคิดว่ามีบางคนผ่านการลงคะแนนทุกอย่าง
emote_control

0

วันนี้ฉันประสบปัญหาเดียวกัน ในกรณีของฉันคีย์ต่างๆซ้อนกันเช่น key1.key2 ฉันแบ่งคีย์โดยใช้ split () จากนั้นใช้เครื่องหมายวงเล็บเหลี่ยมซึ่งทำงานให้ฉันได้

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

ฉันแบ่งคีย์และใช้มันเช่นนี้ข้อมูล [key1] [key2] ซึ่งทำงานให้ฉันได้


0

ฉันมีปัญหาเดียวกันวันนี้ ปัญหาเกิดจาก uglify-js หลังจากที่ฉันดำเนินการแก้ไขปัญหารหัสที่ไม่ใช่ uglified เดียวกันได้รับการแก้ไข กำลังลบ

--mangle-props

จาก uglify-js ก็เพียงพอที่จะใช้งานรหัส uglified

บางทีวิธีปฏิบัติที่ดีที่สุดคือการใช้ส่วนนำหน้าสำหรับคุณสมบัติที่จะต้องมี mangled ด้วยกฎ regex สำหรับ uglify-js

นี่คือแหล่งที่มา:

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 stringify / parse ไม่ทำงานสำหรับฉัน

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

ฉันต้องการคุณค่าของformValues.myKeyและสิ่งที่หลอกลวงคือ setTimeout 0 เช่นในตัวอย่างด้านล่าง หวังว่ามันจะช่วย

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

0

ฉันเพิ่งพบปัญหานี้เช่นกันและเรื่องสั้นสั้น ๆ API ของฉันกลับมาเป็นประเภทสตริงไม่ใช่ JSON ดังนั้นมันจึงดูเหมือนกันทุกประการเมื่อคุณพิมพ์ลงในบันทึก แต่เมื่อใดก็ตามที่ฉันพยายามเข้าถึงคุณสมบัติมันทำให้ฉันมีข้อผิดพลาดที่ไม่ได้กำหนด

รหัส API:

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

ก่อนหน้านี้ฉันเพิ่งจะกลับมา:

return Json(string Of object);

0

ฉันมีปัญหาที่คล้ายกันในวันนี้ในปฏิกิริยา ในที่สุดก็ตระหนักว่าปัญหาที่เกิดจากรัฐยังไม่ได้ตั้ง ฉันถูกเรียกuser.user.nameและแม้ว่ามันจะถูกแสดงในคอนโซลฉันไม่สามารถดูเหมือนจะเข้าถึงได้ในองค์ประกอบของฉันจนฉันรวมถึงการตรวจสอบเพื่อตรวจสอบว่าถูกกำหนดไว้แล้วโทรuser.useruser.user.name

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.