Rumah >hujung hadapan web >tutorial js >Mengapakah JSON.stringify Mengembalikan Objek Kosong Apabila Menyatukan Objek Ralat Asli?

Mengapakah JSON.stringify Mengembalikan Objek Kosong Apabila Menyatukan Objek Ralat Asli?

Barbara Streisand
Barbara Streisandasal
2024-12-02 05:47:09998semak imbas

Why Does JSON.stringify Return an Empty Object When Stringifying Native Error Objects?

JSON.stringify: Stringifying Native Error Messages

Dalam bidang pembangunan web, fungsi JSON.stringify ialah alat yang berkuasa untuk menukar objek JavaScript kepada rentetan JSON. Walau bagaimanapun, tingkah laku luar biasa timbul apabila cuba untuk menyelaraskan objek Ralat asli. Daripada maklumat ralat yang dijangkakan, objek kosong dikembalikan.

Meneroka Anomali

Untuk menyelidiki fenomena ini, pertimbangkan coretan kod berikut:

const error = new Error('simple error message');
console.log(JSON.stringify(error)); // Outputs: '{}'

Sebagaimana ditunjukkan di atas, JSON.stringify mengembalikan objek kosong, menunjukkan bahawa sifat objek Ralat asli tidak bertali. Tingkah laku ini berpunca daripada kekurangan sifat terhitung dalam objek Ralat.

Untuk mengesahkan ini, kita boleh menggunakan Object.getOwnPropertyNames untuk mendapatkan semula nama sifat yang ditakrifkan dalam objek Ralat:

console.log(Object.getOwnPropertyNames(error)); // Outputs: ['stack', 'arguments', 'type', 'message']

Walau bagaimanapun, jika kami memeriksa deskriptor sifat, kami mendapati bahawa atribut boleh dikira ditetapkan kepada palsu untuk semua sifat:

for (var property in error) {
  var descriptor = Object.getOwnPropertyDescriptor(error, property);
  console.log(property, descriptor);
}

Penyelesaian kepada Enigma

Walaupun kekurangan sifat yang boleh dikira, terdapat penyelesaian untuk menyelaraskan objek Ralat asli menggunakan JSON.stringify:

JSON.stringify(err, Object.getOwnPropertyNames(err))

Dengan menyediakan senarai nama harta sebagai hujah kedua kepada JSON.stringify, kami secara eksplisit mengarahkannya untuk memasukkannya ke dalam proses rentetan, walaupun ia tidak boleh dikira secara lalai.

Atas ialah kandungan terperinci Mengapakah JSON.stringify Mengembalikan Objek Kosong Apabila Menyatukan Objek Ralat Asli?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn