mata utama
.
Jenis nomborDalam 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);
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
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);
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
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
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
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); }
alert((NaN === NaN)); // 显示 false
isNaN(1); // 返回 false isNaN(NaN); // 返回 true
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
function isNotANumber(x) { return x !== x; }
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)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!