2016-02-08 35 views
4

考慮以下幾點:爲什麼在錯誤時使用parseInt返回14?

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

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

看來這種行爲是唯一的錯誤/錯誤的實例。誰能提供見解?

+2

首先,爲什麼在錯誤上使用parseInt? – sp00m

+0

'parseInt([「E」],16)'也適用。 – Bergi

+1

類似地,'parseInt(false,16)'產生250(十六進制FA)。 –

回答

11

基本上,這是因爲:

  • new Error().toString()產生"Error",和
  • parseInt("Error", 16)產生14(因爲0xE14和解析器在r停止工作)。

在另一方面,因爲new Array()陣列對象的toString()方法返回數組的內容,用逗號,不是類名分隔不會觸發相同的行爲。因此,new Array().toString()會生成空字符串,然後parseInt()會生成NaN

+0

啊,這很有道理。謝謝! – savax0

相關問題