Rumah >hujung hadapan web >tutorial js >Mengapa Nombor Besar Dibundarkan Secara Tidak Betul dalam Penghuraian JSON JavaScript?

Mengapa Nombor Besar Dibundarkan Secara Tidak Betul dalam Penghuraian JSON JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-17 15:27:10363semak imbas

Why Are Large Numbers Rounded Incorrectly in JavaScript JSON Parsing?

Nombor Besar Tersilap Dibundarkan dalam JavaScript

Apabila dihuraikan menggunakan JSON.parse, nilai berangka yang besar dalam rentetan JSON kadangkala boleh dibundarkan secara salah dalam JavaScript. Isu ini timbul kerana jenis nombor JavaScript mempunyai kapasiti terhad, yang diterangkan dalam spesifikasi format titik terapung binari berketepatan dua IEEE-754.

JavaScript boleh mewakili nombor dengan tepat sehingga lebih kurang 9007199254740991 (Number.MAX_SAFE_INTEGER) . Di luar nilai ini, format kehilangan ketepatan dan nombor mungkin dibundarkan kepada nilai yang boleh diwakili terdekat.

Sebagai contoh, kod berikut menunjukkan tingkah laku ini:

const jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
const jsonParsed = JSON.parse(jsonString);
console.log(jsonString, jsonParsed);

Apabila dilaksanakan, nilai daripada jsonParsed.id tersalah dibundarkan kepada 714341252076979100. Ini kerana nilai asal, 714341252076979033, berada di luar julat integer selamat.

Untuk mengelakkan isu ini, pertimbangkan untuk menggunakan perwakilan rentetan untuk nilai berangka yang besar dan bukannya nombor. Sebagai alternatif, anda boleh menggunakan jenis data BigInt dalam ES2020, yang menyokong integer yang besar secara sewenang-wenangnya. Walau bagaimanapun, ambil perhatian bahawa nilai BigInt tidak boleh disirikan secara asli kepada JSON, jadi anda perlu menggunakan penyeri/deserializer tersuai.

Atas ialah kandungan terperinci Mengapa Nombor Besar Dibundarkan Secara Tidak Betul dalam Penghuraian JSON JavaScript?. 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
Artikel sebelumnya:React New hook useActionStateArtikel seterusnya:React New hook useActionState