Di bawah, Anda dapat melihat output dari dua log ini. Yang pertama jelas menunjukkan objek penuh dengan properti yang saya coba akses, tetapi pada baris kode berikutnya, saya tidak dapat mengaksesnya dengan config.col_id_3
(lihat "tidak terdefinisi" pada tangkapan layar?). Adakah yang bisa menjelaskan ini? Saya bisa mendapatkan akses ke setiap properti lain kecuali field_id_4
juga.
console.log(config);
console.log(config.col_id_3);
Inilah yang dicetak garis-garis ini di Konsol
javascript
console.log
Brian Litzinger
sumber
sumber
console.log(JSON.stringify(config));
Dapatkah Anda mencoba dan berbagi o / pJSON.parse(obj)
Jawaban:
Output dari
console.log(anObject)
ini menyesatkan; keadaan objek yang ditampilkan hanya diselesaikan ketika Anda memperluas>
konsol. Ini bukan keadaan objek saat Andaconsole.log
objek.Sebagai gantinya, coba
console.log(Object.keys(config))
, atau bahkanconsole.log(JSON.stringify(config))
dan Anda akan melihat kunci, atau keadaan objek pada saat Anda meneleponconsole.log
.Anda akan (biasanya) menemukan kunci yang ditambahkan setelah
console.log
panggilan Anda .sumber
>
tombol berbeda tergantung pada apakah array sedang diperluas, atau suatu objek?Saya baru saja mengalami masalah ini dengan dokumen yang dimuat dari MongoDB menggunakan Mongoose .
Saat berjalan
console.log()
pada seluruh objek, semua bidang dokumen (seperti yang disimpan dalam db) akan muncul. Namun beberapa pengakses properti individual akan kembaliundefined
, ketika yang lain (termasuk_id
) bekerja dengan baik.Ternyata pengakses properti hanya berfungsi untuk bidang yang ditentukan dalam
mongoose.Schema(...)
definisi saya , sedangkanconsole.log()
danJSON.stringify()
mengembalikan semua bidang yang disimpan dalam db.Solusi (jika Anda menggunakan Mongoose) : pastikan semua bidang db Anda didefinisikan
mongoose.Schema(...)
.sumber
JSON.stringify()
(dan Nodeconsole.log()
) mengubah perilaku mereka jika objek yang diberikan memiliki.toJSON()
fungsi. Output yang Anda lihat adalah apa yang.toJSON()
dikembalikan, dan bukan objek aslinya. Mongoose memberi Anda objek model dengan.toJSON()
yang memberikan objek db yang mendasarinya. Objek model hanya memiliki pengakses untuk bidang yang Anda tentukan dalam skema, tetapi kemudian semua bidang db muncul ketika Anda login karena Anda benar-benar melihat objek yang mendasarinya dikembalikan oleh.toJSON()
.Periksa apakah di dalam objek ada array objek. Saya memiliki masalah serupa dengan JSON:
Saya mencoba mengakses kunci 'nama' dari 'kategori' dan saya mendapatkan kesalahan yang tidak terdefinisi , karena saya menggunakan:
Kemudian saya menyadari bahwa ia memiliki tanda kurung siku, yang berarti ia memiliki larik objek di dalam kunci kategori, karena dapat memiliki lebih dari satu objek kategori. Jadi, untuk mendapatkan kunci 'nama' saya menggunakan ini:
Dan itu berhasil.
Mungkin sudah terlambat untuk jawaban ini, tetapi saya berharap seseorang dengan masalah yang sama akan menemukan ini seperti yang saya lakukan sebelum menemukan Solusi :)
sumber
Saya memiliki masalah yang sama. Solusi bagi saya adalah menggunakan output yang dirumuskan sebagai input untuk mem-parsing JSON. ini berhasil untuk saya. Semoga bermanfaat bagi Anda
sumber
Properti yang Anda coba akses mungkin belum ada. Console.log berfungsi karena dijalankan setelah penundaan kecil, tetapi itu tidak berlaku untuk sisa kode Anda. Coba ini:
sumber
Dalam kasus saya, saya menyerahkan objek ke janji, dalam janji saya menambahkan lebih banyak kunci / nilai ke objek dan ketika itu dilakukan janji mengembalikan objek.
Namun, dengan sedikit melihat pada bagian saya, janji itu mengembalikan objek sebelum sepenuhnya selesai ... sehingga sisa kode saya sedang mencoba untuk memproses objek yang diperbarui dan data belum ada di sana. Tapi seperti di atas, di konsol, saya melihat objek sepenuhnya diperbarui tetapi tidak dapat mengakses kunci - mereka kembali tidak terdefinisi. Sampai saya melihat ini:
[I] adalah ikon kecil, ketika saya mendekatinya katanya
Object value at left was snapshotted when logged, value below was evaluated just now
. Itulah ketika saya sadar bahwa objek saya sedang dievaluasi sebelum janji telah memperbaruinya sepenuhnya.sumber
Saya berjuang dengan masalah ini hari ini, dan berpikir saya akan meninggalkan balasan dengan solusi saya.
Saya mengambil objek data melalui ajax, sesuatu seperti ini:
{"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}
Katakanlah objek ini dalam variabel yang disebut data. Setiap kali saya referensi
data.i18n
saya mendapatundefined
.console.log(data)
menunjukkan objek seperti yang diharapkanconsole.log(Object.keys(data))
kata["constants","i18n"]
seperti yang diharapkanTidak ada yang membantu ... Kemudian di sisi server saya menulis data ke log php, dan itu mengungkapkan ini:
{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}
"I" pada kunci indeks sebenarnya adalah u0456 (cyrillic i). Ini tidak terlihat di editor php saya atau log konsol browser. Hanya log php yang mengungkapkan ini ... Itu yang rumit ...
sumber
Data saya hanya string data json. (Variabel ini disimpan sebagai string json di sesi).
-> mengembalikan hanya representasi string ini dan tidak ada cara untuk membuat perbedaan apakah string atau objek.
Jadi untuk membuatnya bekerja, saya hanya perlu mengubahnya kembali menjadi objek nyata:
sumber
Pada 2018 Mozilla memperingatkan kita di Mozilla Docs di sini !
Saya mengutip "Objek Pencatatan" :
sumber
Ini mungkin membantu seseorang karena saya memiliki masalah serupa di mana JSON.parse () mengembalikan objek yang bisa saya cetak di console.log () tapi saya tidak bisa mengakses bidang tertentu dan tidak ada solusi di atas yang berfungsi untuk saya. Seperti menggunakan kombinasi JSON.parse () dengan JSON.stringify ().
Saya akhirnya memecahkan masalah dengan menggunakan parser berbeda yang disediakan oleh ExtJs Ext.decode ();
sumber
Dalam kasus saya, kebetulan bahwa meskipun saya menerima data dalam format model seperti
myMethod(data:MyModelClass)
objek sampai objek yang diterima adalah tipe string. Yaitu di console.log (data) saya mendapatkan konten. Solusi hanya untuk mengurai JSON (dalam kasus saya)Pikiran mungkin bermanfaat.
sumber
Saya baru saja mengalami masalah ini dengan objek yang dihasilkan oleh csv-parser dari file CSV yang dihasilkan oleh MS Excel. Saya dapat mengakses semua properti kecuali properti pertama - tetapi akan muncul ok jika saya menulis seluruh objek menggunakan console.log.
Ternyata format CSF UTF-8 memasukkan 3 byte (ef bb bf) di awal yang sesuai dengan karakter yang tidak terlihat - yang dimasukkan sebagai bagian dari header properti pertama oleh csv-parser. Solusi adalah untuk menghasilkan kembali CSV menggunakan opsi non-UTF dan ini menghilangkan karakter yang tidak terlihat.
sumber
Saya pernah mengalami masalah serupa, semoga solusi berikut membantu seseorang.
Anda dapat menggunakan
setTimeout
fungsi seperti yang disarankan beberapa orang di sini, tetapi Anda tidak pernah tahu berapa lama browser Anda perlu mendefinisikan objek Anda.Dari itu saya sarankan menggunakan
setInterval
fungsi saja. Ini akan menunggu sampai objek Andaconfig.col_id_3
didefinisikan dan kemudian jalankan bagian kode Anda berikutnya yang membutuhkan properti objek spesifik Anda.sumber
jika Anda menggunakan
TYPESCRIPT
dan / atauANGULAR
, bisa jadi ini!.then((res: any) => res.json())
mengatur tipe respons ke masalah apa pun yang diperbaiki untuk saya, saya tidak bisa mengakses properti pada respons sampai saya mengatur res: any
lihat pertanyaan ini Properti '_body' tidak ada pada tipe 'Respons'
sumber
Saya memiliki masalah yang sama dan tidak ada solusi di atas yang bekerja untuk saya dan rasanya seperti menebak setelahnya. Namun, membungkus kode saya yang membuat objek dalam suatu
setTimeout
fungsi melakukan trik untuk saya.sumber
Saya memiliki masalah serupa atau mungkin hanya terkait.
Untuk kasus saya, saya sedang mengakses properti dari suatu objek tetapi satu tidak terdefinisi. Saya menemukan masalahnya adalah ruang putih di kode sisi server sambil membuat kunci, val objek.
Pendekatan saya adalah sebagai berikut ...
Setelah menghapus white-space dari kode sisi server membuat objek, sekarang saya bisa mengakses properti seperti di bawah ini ...
Ini mungkin bukan masalah dengan kasus pertanyaan subjek tetapi untuk kasus saya dan mungkin demikian untuk orang lain. Semoga ini bisa membantu.
sumber
Saya baru saja mengalami masalah yang sama dengan dokumen yang dimuat dari MongoDB menggunakan Mongoose.
Ternyata saya menggunakan properti
find()
untuk mengembalikan hanya satu objek, jadi saya berubahfind()
menjadifindOne()
dan semuanya bekerja untuk saya.Solusi (jika Anda menggunakan Mongoose): Pastikan untuk mengembalikan satu objek saja, sehingga Anda dapat menguraikannya
object.id
atau akan diperlakukan sebagai array sehingga Anda perlu mengaksesnya seperti ituobject[0].id
.sumber
Bagi saya itu ternyata masalah yang berhubungan dengan Mongoose.
Saya mengulang-ulang objek yang saya dapatkan dari permintaan Mongo. Saya hanya perlu menghapus:
Dan ganti dengan:
sumber
Saya punya masalah seperti ini, dan menemukan solusinya adalah dengan Underscore.js. Pencatatan awal saya tidak masuk akal:
Saya menemukan solusinya dengan juga melihat kunci-kunci objek:
Hal ini membuat saya sadar bahwa
obj
itu sebenarnya pembungkus Underscore.js di sekitar objek, dan debugging awal berbohong kepada saya.sumber
Saya memiliki masalah yang sama (ketika mengembangkan untuk SugarCRM), di mana saya mulai dengan:
Masalahnya adalah
fetch()
, panggilan asyncnya jadi saya harus menulis ulang kode saya menjadi:sumber
Kalau-kalau ini berguna untuk seseorang, saya punya masalah yang sama, dan itu karena seseorang membuat override untuk .toJSON pada objek yang saya kerjakan. Jadi objeknya seperti:
Tapi .toJSON () adalah:
Jadi ketika saya menelepon JSON.stringify (myObject), ia mengembalikan "{" bar ":" Hello "," baz ":" World "}". Namun, Object.keys (myObject) mengungkapkan "foo".
sumber
toJson()
ini adalah poin yang tidak ada yang disebutkan di sini. Saya tidak tahu mengapa jawaban ini diturunkan karena ini adalah cara untuk membuat objek yang memiliki nilai berbeda dari representasi json atau konsol. Saya tidak tahu itu ada sampai saya mengungkapnya dalam jawaban yang berbeda, dan saya pikir jawaban ini harus terangkat karena itu adalah titik untuk mempertimbangkan dengan jenis masalah ini.Saya menghadapi masalah yang sama hari ini. Dalam kasus saya kunci-kunci itu bersarang, yaitu key1.key2. Saya membagi kunci menggunakan split () dan kemudian menggunakan notasi braket persegi, yang berhasil bagi saya.
Saya membagi kunci dan menggunakannya seperti ini, data [key1] [key2] yang melakukan pekerjaan untuk saya.
sumber
Saya memiliki masalah yang sama hari ini. Masalah disebabkan oleh uglify-js. Setelah saya mengeksekusi masalah kode non-uglified yang sama diselesaikan. Menghapus dari
dari uglify-js cukup untuk menjalankan kode uglified.
Mungkin, praktik terbaik adalah menggunakan beberapa awalan untuk properti yang harus dikacaukan dengan aturan regex untuk uglify-js.
Inilah sumbernya:
dan di sini adalah bagaimana itu diperlihatkan:
sumber
Tidak satu pun dari JSON strify / parse yang berfungsi untuk saya.
Saya ingin nilai
formValues.myKey
dan apa triknya adalah setTimeout 0 seperti pada contoh di bawah ini. Semoga ini bisa membantu.sumber
Saya baru saja mengalami masalah ini, dan singkatnya API saya mengembalikan tipe string dan bukan JSON. Jadi itu terlihat persis sama ketika Anda mencetaknya ke log namun setiap kali saya mencoba mengakses properti itu memberi saya kesalahan yang tidak ditentukan.
Kode API:
sebelumnya saya baru saja kembali:
sumber
Saya memiliki masalah yang sama hari ini di React. Akhirnya menyadari bahwa masalah itu disebabkan oleh negara yang belum ditetapkan. Saya menelepon
user.user.name
dan meskipun itu muncul di konsol, saya tidak bisa mengaksesnya di komponen saya sampai saya menyertakan cek untuk memeriksa apakahuser.user
sudah diatur dan kemudian meneleponuser.user.name
.sumber