Mengapa ParseInt Mengembalikan NaN dengan Array#map?
Rangkaian Pembangun Mozilla menyatakan bahawa [1,4,9].map( Math.sqrt) mengembalikan [1,2,3]. Walau bagaimanapun, menggunakan parseInt pada tatasusunan literal ['1','2','3'] dengan hasil peta [1, NaN, NaN]. Tingkah laku ini berlaku dalam Firefox 3.0.1 dan Chrome 0.3.
Punca Punca
Percanggahan timbul daripada fungsi panggil balik dalam peta yang mempunyai tiga parameter: nilai elemen, indeksnya, dan objek tatasusunan yang dilalui. Apabila parseInt dipanggil dalam peta, indeks menjadi hujah kedua, yang ditafsirkan sebagai radix (asas sistem nombor yang sedang ditukar).
Dalam kes yang disebutkan di atas, parseInt dipanggil dengan nilai radix 0 , 1, dan 2, masing-masing. Radix ialah 10 secara lalai untuk integer tanpa sifar pendahuluan. Walau bagaimanapun, radix 1 adalah tidak sah dan radix 2 tidak menyokong nombor 3. Oleh itu, parseInt mengembalikan NaN untuk elemen kedua dan ketiga.
Penyelesaian
Kepada betulkan ini, fungsi pembungkus boleh digunakan:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
Sebagai alternatif, dalam ES2015 :
['1','2','3'].map(num => parseInt(num, 10));
Dengan memberikan radix secara eksplisit sebagai 10, kami memastikan parseInt mentafsir rentetan dengan betul sebagai integer asas-10.
Atas ialah kandungan terperinci Mengapakah `parseInt` Mengembalikan `NaN` Apabila Digunakan dengan `Array#map`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!