Đó là vì map
đi tranh luận hơn chỉ mục mảng vào hàm gọi lại. Bạn nhận được:
callback(item, index, array)
Thông thường, chức năng của bạn sẽ bỏ qua các đối số không cần. Nhưng parseInt
chấp nhận một tham số thứ hai tùy chọn:
parseInt(string, base)
cho cuộc gọi đầu tiên, base
là index
0
. Điều đó hoạt động tốt vì ECMAScript xác định rằng base=0
giống như bỏ qua đối số và do đó cho phép thập phân, bát phân hoặc hex (sử dụng số thập phân trong trường hợp này).
Đối với mặt hàng thứ hai và thứ ba, base
là 1
hoặc 2
. Nó cố gắng phân tích cú pháp số là base-1 (không tồn tại) hoặc base-2 (nhị phân). Vì số đầu tiên trong chuỗi là một chữ số không tồn tại trong các căn cứ đó, bạn sẽ nhận được NaN
.
Nói chung, parseInt
mà không có một cơ sở là khá đáng ngờ nào, vì vậy bạn có thể muốn:
["655971", "2343", "343"].map(function(x) { return parseInt(x, 10) })
Trong trường hợp có ai quan tâm, tình trạng này được mô tả một cách chi tiết, trên các [MDN 'Array.prototype .map' page] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Example:_Tricky_use_case) được tham chiếu bởi bài đăng blog sau: [Allen Wirfs -Brock - Nguy cơ đối số tùy chọn JavaScript] (http://www.wirfs-brock.com/allen/posts/166). –