Rumah > hujung hadapan web > tutorial js > Seronok dengan nombor JavaScript

Seronok dengan nombor JavaScript

Lisa Kudrow
Lepaskan: 2025-02-24 10:17:10
asal
444 orang telah melayarinya

Fun with JavaScript Numbers

mata utama

    Semua nombor dalam JavaScript diwakili menggunakan jenis data nombor, termasuk bilangan bulat, nombor sebenar, nombor heksadesimal, dan nombor notasi saintifik. Walau bagaimanapun, JavaScript secara dalaman mewakili semua nombor sebagai nombor titik terapung IEEE 754, yang bermaksud bahawa matematik JavaScript tidak 100% tepat.
  • JavaScript mentakrifkan nombor yang dipanggil Not-A-Number (NAN) untuk mewakili bukan digit sebagai nombor. NAN adalah satu -satunya nilai angka dalam JavaScript yang tidak sama dengan dirinya sendiri, dan boleh diuji menggunakan fungsi ISNAN ().
  • JavaScript mempunyai beberapa ciri, seperti sifar yang ditandatangani, menghasilkan sifar positif (0) dan sifar negatif (-0), yang dianggap nilai yang berbeza, tetapi pengendali perbandingan JavaScript tidak dapat membezakannya. Dalam JavaScript, membahagikan dengan sifar menghasilkan tak terhingga, dan membahagikan oleh sifar negatif menghasilkan -infinity.
  • Jenis data adalah bahagian penting dari setiap bahasa pengaturcaraan, dan nombor mungkin jenis data yang paling penting. Lagipun, komputer benar -benar hanya kalkulator mahal. Seperti mana -mana bahasa pengaturcaraan yang berharga, JavaScript menyokong data berangka. Tetapi, seperti banyak aspek lain dari JavaScript, terdapat beberapa nuansa dalam nombor yang boleh menyebabkan anda masalah jika anda tidak berhati -hati. Artikel ini membincangkan data berangka dan beberapa ciri -cirinya.
Nota: Sebelum membaca artikel ini, anda harus mempunyai pemahaman asas mengenai jenis data JavaScript

.

Jenis nombor

Dalam JavaScript, semua nombor diwakili oleh jenis data nombor. Ini termasuk bilangan bulat, nombor sebenar, nombor heksadesimal dan nombor yang diwakili oleh notasi saintifik. Contoh berikut mengesahkan ini dengan menggunakan pengendali jenis ke pelbagai nombor. Dalam contoh ini, setiap aplikasi TypeOf mengembalikan nombor.

Dalam contoh terdahulu, nombor dalam pelbagai format. Walau bagaimanapun, secara dalaman, semua nombor JavaScript sebenarnya diwakili sebagai nombor titik terapung IEEE 754. Ini penting kerana ia bermakna bahawa JavaScript tidak mempunyai konsep integer, walaupun bahasa mempunyai fungsi parseInt (). Ini juga bermakna bahawa operasi matematik JavaScript tidak 100% tepat. Sebagai contoh, pertimbangkan ungkapan berikut.
typeof(100);
typeof(3.14);
typeof(0xDEADBEEF);
typeof(7.89e2);
Salin selepas log masuk
Salin selepas log masuk

Jika anda tidak biasa dengan nombor titik terapung, anda pasti akan mengharapkan ungkapan ini untuk menilai benar. Lagipun, 0.1 0.2 sama dengan 0.3. Walau bagaimanapun, disebabkan bagaimana nombor titik terapung berfungsi, jumlahnya sebenarnya 0.300000000000000000000000004. Perbezaannya kecil, tetapi ini cukup untuk menyebabkan keseluruhan ekspresi menilai palsu.
(0.1 + 0.2) === 0.3
Salin selepas log masuk
Salin selepas log masuk

sifar positif dan sifar negatif

Satu lagi ciri standard IEEE 754 ialah sifar yang ditandatangani. Ini menghasilkan dua sifar - sifar positif, 0, dan sifar negatif, -0. Ini mungkin kelihatan pelik, tetapi keseronokan baru sahaja bermula. Jelas sekali, kedua -dua ini adalah nilai yang berbeza, jika tidak, hanya satu sifar. Walau bagaimanapun, jika anda menunjukkan salah satu daripada kedua -dua sifar ini, simbol akan dipadamkan. Sebagai contoh, kod berikut cuba memaparkan kedua -dua nilai sifar ini bersebelahan.

typeof(100);
typeof(3.14);
typeof(0xDEADBEEF);
typeof(7.89e2);
Salin selepas log masuk
Salin selepas log masuk

lebih teruk, pengendali perbandingan JavaScript juga nampaknya tidak dapat membezakan antara kedua -dua nilai, seperti yang ditunjukkan dalam contoh berikut.

(0.1 + 0.2) === 0.3
Salin selepas log masuk
Salin selepas log masuk

Terdapat penyelesaian yang agak mudah untuk masalah ini. Dalam JavaScript, pembahagian dengan sifar menghasilkan tak terhingga. Begitu juga, membahagikan dengan sifar negatif akan menghasilkan -infinity. Oleh itu, untuk menentukan sama ada nombor adalah sama dengan -0, kita perlu menyemak sama ada sifar, kemudian gunakannya sebagai penyebut untuk pembahagian dan periksa -infiniti seperti yang ditunjukkan di bawah.

alert((+0) + " " + (-0));
// 显示 0 0
Salin selepas log masuk

not-a-number (nan)

JavaScript sebenarnya mentakrifkan nombor yang dipanggil Not-A-Number (NAN). NAN adalah nilai palsu yang digunakan untuk mewakili nombor sebagai nombor. Nilai ini menarik kerana namanya sendiri mengetepikan kemungkinan bahawa ia adalah nombor, tetapi Typeof (NAN) adalah nombor. NAN juga menarik kerana ia adalah satu -satunya nilai dalam JavaScript yang tidak sama. Sebagai contoh, kod berikut akan kembali palsu.

alert((+0 === -0));
// 显示 true
alert((-0 === +0)); // 显示 true
Salin selepas log masuk

Anda boleh menguji NAN menggunakan fungsi ISNAN () dan bukannya menggunakan pengendali perbandingan seperti yang ditunjukkan di bawah.

function isNegativeZero(x) {
  return (x === 0 && (1/x) === -Infinity);
}
Salin selepas log masuk
Walau bagaimanapun, isnan () juga menarik kerana ia boleh mengelirukan. Jika anda lulus dalam nilai yang boleh dibuang ke nombor, Isnan () akan kembali palsu. Dalam contoh berikut, Isnan () dipanggil dengan beberapa nilai yang jelas tidak angka. Walau bagaimanapun, setiap panggilan kembali palsu.

alert((NaN === NaN));
// 显示 false
Salin selepas log masuk
Cara yang lebih baik untuk memeriksa NAN adalah untuk memanfaatkan hakikat bahawa ia tidak sama. Ujian fungsi berikut nan menggunakan ketidaksamaan yang ketat. Fungsi ini mengembalikan hanya untuk nilai nan.

isNaN(1);
// 返回 false
isNaN(NaN);
// 返回 true
Salin selepas log masuk

Momen -momen yang menyeronokkan lain

Terdapat beberapa situasi lain yang boleh menyebabkan masalah dengan nombor. Pertama, anda harus menyedari pelayar lama, yang membolehkan sifat global seperti Infinity, Nan, dan Undefined untuk ditakrifkan semula sebagai nilai baru. Sebagai contoh, jika anda menggunakan NAN dengan kerap, kod berikut boleh menyebabkan banyak masalah. Nasib baik, pelayar moden mengabaikan tugasan kepada sifat -sifat yang disebutkan di atas. Mod yang ketat melangkah lebih jauh, menukar kegagalan senyap ini ke dalam kesilapan.

isNaN(true);
isNaN(false);
isNaN("");
isNaN(null);
// 全部返回 false
Salin selepas log masuk
Satu lagi kesilapan diagnostik yang menarik datang dari menambah nombor dan rentetan. Contohnya ditunjukkan di bawah. Dalam kes ini, concatenation rentetan mengatasi penambahan. Ini menyebabkan Foo ditukar kepada rentetan "100". Hasil akhirnya adalah rentetan "1001", yang sangat berbeza dari nilai yang diharapkan dari 101. Kesalahan jenis ini lebih biasa daripada yang anda fikirkan dan sering berlaku apabila membaca input pengguna.

function isNotANumber(x) {
  return x !== x;
}
Salin selepas log masuk

Kesimpulan

Artikel ini membincangkan beberapa ciri nombor dalam JavaScript. Mudah -mudahan anda sekarang memahami bagaimana masalah ini timbul dan bagaimana untuk mengelakkannya. Dan, sementara anda mungkin tidak sering menghadapi situasi seperti sifar negatif, sekurang -kurangnya sekarang anda sudah bersedia.

soalan yang sering ditanya mengenai nombor JavaScript (FAQ)

Apa yang berlaku apabila membahagikan nombor dengan sifar di JavaScript?

Dalam JavaScript, apabila anda membahagikan nombor dengan sifar, hasilnya adalah tak terhingga. Ini kerana mana -mana nombor yang dibahagikan dengan sifar secara matematik tidak ditentukan, tetapi JavaScript mewakili ia sebagai tak terhingga untuk tujuan praktikal. Walau bagaimanapun, jika anda membahagikan sifar sebanyak sifar, hasilnya adalah nan (bukan nombor), kerana operasi ini tidak pasti dalam matematik.

Bagaimana menangani BIGINT dibahagikan dengan sifar?

BigInt adalah objek terbina dalam dalam JavaScript yang menyediakan cara untuk mewakili bilangan bulat yang lebih besar daripada 2^53-1, bilangan terbesar yang JavaScript boleh mewakili dengan menggunakan nombor primitif. Jika anda cuba membahagikan BIGINT oleh sifar, JavaScript akan membuang rangeError yang menunjukkan bahawa operasi itu tidak sah.

Bagaimana untuk mencegah atau mengendalikan pembahagian oleh ralat sifar dalam JavaScript?

Anda boleh menggunakan pernyataan bersyarat dalam JavaScript untuk mencegah atau memproses pembahagian dengan kesilapan sifar dengan memeriksa sama ada penyebutnya adalah sifar sebelum melakukan operasi pembahagian. Jika penyebutnya adalah sifar, anda boleh memutuskan cara mengendalikannya, sebagai contoh, mengembalikan nilai tertentu atau memaparkan mesej ralat.

Kenapa 0 dibahagikan dengan 0 dalam javascript nan?

Dalam matematik, ungkapan 0/0 tidak ditentukan kerana ia tidak mempunyai nilai yang jelas dan jelas. Dalam JavaScript, operasi matematik yang tidak ditentukan menghasilkan NAN (bukan nombor). Oleh itu, apabila anda membahagikan sifar dengan sifar dalam javascript, hasilnya adalah nan.

Apakah perbezaan antara NAN dan Infinity dalam JavaScript?

Dalam JavaScript, Nan (bukan nombor) dan Infinity adalah nilai khas. NAN mewakili nilai yang bukan nombor undang -undang, biasanya disebabkan oleh operasi matematik yang tidak ditentukan atau tidak pasti. Infinity, sebaliknya, mewakili nombor yang lebih besar daripada nombor yang mungkin, biasanya disebabkan oleh membahagikan nombor dengan sifar.

Bagaimana untuk memeriksa sama ada hasil dalam JavaScript adalah nan?

Anda boleh menggunakan fungsi ISNAN () dalam JavaScript untuk memeriksa sama ada hasilnya adalah NAN. Jika parameter adalah nan, fungsi ini kembali benar, jika tidak palsu.

Bagaimana untuk memeriksa sama ada hasil dalam JavaScript adalah tak terhingga?

Anda boleh menggunakan fungsi ISFinite () dalam JavaScript untuk memeriksa sama ada hasilnya adalah nombor terhingga. Jika parameter adalah positif atau negatif infiniti, fungsi ini mengembalikan palsu, jika tidak benar.

Apakah maksud nombor primitif dalam JavaScript?

Nombor primitif dalam JavaScript digunakan untuk mewakili nilai angka. Ia boleh mewakili nilai integer dan nombor titik terapung. Walau bagaimanapun, ia hanya boleh mewakili nombor sehingga 2^53-1.

Bagaimana menangani jumlah besar dalam JavaScript?

Untuk mengendalikan bilangan besar yang melebihi had integer selamat JavaScript, anda boleh menggunakan objek BIGINT. BigInt membolehkan anda mewakili bilangan bulat yang lebih besar daripada 2^53-1.

Apa itu RangeError dalam JavaScript?

JavaScript melemparkan RangeError apabila nilai tidak berada dalam julat yang diharapkan. Sebagai contoh, cuba membahagikan BIGINT oleh hasil sifar dalam rangeError.

Atas ialah kandungan terperinci Seronok dengan nombor JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan