Mengendalikan Radix dalam Array#map parseInt Calls
Dalam konteks tatasusunan JavaScript, kaedah peta mengubah setiap elemen menggunakan fungsi panggil balik yang disediakan . Walaupun peta boleh berjaya menggunakan Math.sqrt pada nombor, kelakuannya dengan parseInt pada rentetan boleh mengelirukan.
Orang mungkin menjangkakan ['1', '2', '3'].map(parseInt) akan kembali [1, 2, 3]. Walau bagaimanapun, ia sebenarnya menghasilkan [1, NaN, NaN]. Keanehan ini berpunca daripada parameter radix parseInt.
Peranan Radix dalam parseInt
parseInt menjangkakan dua argumen: nilai yang akan ditukar dan radix. Jika radix diabaikan, ia menggunakan "tekaan terbaik" berdasarkan input.
Dalam kes ['1', '2', '3'].map(parseInt), radix menjadi indeks setiap elemen semasa lelaran tatasusunan. Oleh itu, ia akhirnya memanggil:
parseInt('1', 0); // Correct (radix defaults to 10) parseInt('2', 1); // Invalid radix (not a number base) parseInt('3', 2); // Invalid number in base 2
Menyelesaikan Isu
Untuk menyelesaikan isu ini dan mendapatkan hasil yang diingini [1, 2, 3], anda boleh gunakan fungsi pembungkus seperti ini:
['1', '2', '3'].map(function(num) { return parseInt(num, 10); });
atau dengan ES2015 sintaks:
['1', '2', '3'].map(num => parseInt(num, 10));
Di sini, radix ditetapkan secara eksplisit kepada 10, memastikan penghuraian yang betul.
Atas ialah kandungan terperinci Mengapakah `['1', '2', '3'].map(parseInt)` Mengembalikan `[1, NaN, NaN]` dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!