2016-02-08 36 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

相关问题