为什么在错误 return 14 上使用 parseInt?

Why does using parseInt on Error return 14?

考虑以下几点:

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

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

似乎此行为是 Error/instances 错误所独有的。谁能提供见解?

基本上,那是因为:

  • new Error().toString() 产生 "Error"
  • parseInt("Error", 16) 产生 14(因为 0xE14 并且解析器停止在 r)。

另一方面,new Array() 不会触发相同的行为,因为数组对象的 toString() 方法 returns 数组的内容,用逗号分隔,而不是 class名字。因此,new Array().toString() 生成空字符串,parseInt() 随后生成 NaN.