web-dev-qa-db-fra.com

Comportement étrange pour Map, parseInt

Duplicata possible:
javascript - Array.map et parseInt

J'ai vu cet exemple de comportement JavaScript étrange sur Twitter

['10','10','10','10','10'].map(parseInt)

évalue à

[10, NaN, 2, 3, 4]

quelqu'un pourrait-il expliquer ce comportement? Je l'ai vérifié dans chrome et firebug

['10','10','10','10','10'].map(function(x){return parseInt(x);})

renvoie correctement un tableau de 10 sous forme d'entiers. Est-ce une mauvaise utilisation de map (), un bogue avec parseInt ou autre chose?

93
Ben McCormick

parseInt reçoit deux arguments: string et radix:

var intValue = parseInt(string[, radix]);

tandis que map le deuxième argument du gestionnaire est index:

... le rappel est invoqué avec trois arguments: la valeur de l'élément, l'index de l'élément et l'objet Array traversé.

109
VisioN

parseInt utilise les deux premiers arguments transmis par la carte et utilise le deuxième argument pour spécifier le radix.

Voici ce qui se passe dans votre code:

parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4

Voici un lien vers MDN sur parseInt: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt .

36
Joseph Silber

De MDN:

le rappel est invoqué avec trois arguments: la valeur de l'élément, l'index de l'élément et l'objet Array traversé.

parseInt() prend deux arguments. La valeur et le radix. Cela signifie que la fonction parseInt() est appelée avec des paramètres involontaires.

5
Justin Niessner