2016-02-08 2 views
4

Considérez ce qui suit:Pourquoi l'utilisation de parseInt sur Erreur renvoie 14?

parseInt(new Array(), 10); // -> NaN 
parseInt(new Array(), 16); // -> NaN 

parseInt(new Error(), 10); // -> NaN 
parseInt(new Error(), 16); // -> 14 

Il semble que ce comportement est unique erreur/cas d'erreur. Quelqu'un peut-il donner un aperçu?

+2

Premièrement, pourquoi utiliser parseInt on Error? – sp00m

+0

'parseInt ([" E "], 16)' fonctionne aussi bien. – Bergi

+1

De même, 'parseInt (false, 16)' renvoie 250 (FA hexadécimal). –

Répondre

11

Fondamentalement, c'est parce que:

  • new Error().toString() cède "Error" et
  • parseInt("Error", 16) cède 14 (parce que 0xE est 14 et l'analyseur arrête à r).

D'autre part, new Array() ne déclenche pas le même comportement parce que la méthode toString() des objets tableau retourne le contenu du tableau, délimités par des virgules, pas le nom de la classe. Par conséquent, new Array().toString() donne la chaîne vide, et parseInt() donne ensuite NaN.

+0

Ah, c'est tout à fait logique. Je vous remercie! – savax0