Es ist, weil map
mehr Argumente übergibt als nur das Array-Element in die Callback-Funktion. Sie erhalten:
callback(item, index, array)
Normalerweise ignoriert Ihre Funktion nur die Argumente, die sie nicht benötigt. Aber parseInt
akzeptiert einen optionalen zweiten Parameter:
parseInt(string, base)
für den ersten Aufruf, base
ist die index
0
. Das funktioniert in Ordnung, weil ECMAScript definiert, dass base=0
dasselbe ist wie das Argument wegzulassen und folglich Dezimal-, Oktal- oder Hexadezimalwerte erlaubt (in diesem Fall dezimal). Für das zweite und dritte Element ist base
1
oder 2
. Es versucht, die Zahl als Base-1 (die nicht existiert) oder Base-2 (Binär) zu analysieren. Da die erste Zahl in der Zeichenfolge eine Ziffer ist, die in diesen Basen nicht existiert, erhalten Sie eine NaN
.
Im Allgemeinen parseInt
ohne Boden ist ziemlich sowieso fraglich, so möchten Sie wahrscheinlich:
["655971", "2343", "343"].map(function(x) { return parseInt(x, 10) })
Falls jemand interessiert ist, diese Situation beschrieben wird, im Detail, auf dem der [MDN 'Array.prototype .map'-Seite] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Example:_Tricky_use_case), auf das der folgende Blogpost verweist: [Allen Wirfs -Brock - Eine optionale JavaScript-Argument-Hazard-Funktion (http://www.wirfs-brock.com/allen/posts/166). –