Hàm gọi lại Array.mapcó ba tham số:
Từ cùng một trang Mozilla mà bạn đã liên kết đến:
gọi lại được gọi với ba đối số: giá trị của phần tử, chỉ mục của phần tử và đối tượng Array được duyệt qua. "
Vì vậy, nếu bạn gọi một hàm parseIntthực sự mong đợi hai đối số, thì đối số thứ hai sẽ là chỉ mục của phần tử.
Trong trường hợp này, bạn đã kết thúc cuộc gọi parseIntvới cơ số 0, 1 và 2 lần lượt. Đầu tiên giống như không cung cấp tham số, vì vậy nó được mặc định dựa trên đầu vào (cơ sở 10, trong trường hợp này). Cơ sở 1 là cơ sở số không thể và 3 không phải là số hợp lệ trong cơ sở 2:
parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2
Vì vậy, trong trường hợp này, bạn cần chức năng bao bọc:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
hoặc với cú pháp ES2015 +:
['1','2','3'].map(num => parseInt(num, 10));
(Trong cả hai trường hợp, tốt nhất là cung cấp một cơ số rõ ràngparseInt như được hiển thị, bởi vì nếu không, nó đoán cơ số dựa trên đầu vào. Trong một số trình duyệt cũ hơn, số 0 dẫn đầu khiến nó đoán được bát phân, có xu hướng có vấn đề. đoán hex nếu chuỗi bắt đầu bằng 0x.)
.map(parseFloat)vì nó mất một tham số.