为什么 parseInt 无法在 Javascript 中正确测试数组?

Why does parseInt fail to test Arrays properly in Javascript?

给定:

var obj={0:21,1:22}

var arr=[21,22]

为什么parseInt(obj)returnNaN,而parseInt(arr)return却21

我有一个函数,我要传递一个 int、一个散列类型 object 或一个普通的 array。对于 objectarray,我期望 parseInt 到 return NaN,从而简化参数检查。给出了什么?

这是因为 parseInt 试图在解析为整数之前将第一个参数强制转换为字符串。 String(obj) returns "[object Object]" 无法解析,但是 String([21,23]) returns "21,23" 解析到 parseInt无法解析的字符。

the parseInt spec:

Let inputString be ? ToString(string).

(将输入强制转换为字符串)。

If S contains a code unit that is not a radix-R digit, let Z be the substring of S consisting of all code units before the first such code unit; otherwise, let Z be S.

(删除以 non-digit 字符开头的字符串的任何部分,因此 "21,23" -> "21")。