给定:
var obj={0:21,1:22}
并且
var arr=[21,22]
为什么
parseInt(obj)
返回NaN
,但parseInt(arr)
返回21
?我有一个函数,我将传递一个
int
、一个哈希类型的object
或一个普通的array
。我期望parseInt
对于object
和array
都返回NaN
,从而简化参数检查。怎么回事?给定:
var obj={0:21,1:22}
并且
var arr=[21,22]
parseInt(obj)
返回NaN
,但parseInt(arr)
返回21
?int
、一个哈希类型的object
或一个普通的array
。我期望parseInt
对于object
和array
都返回NaN
,从而简化参数检查。怎么回事?parseInt
尝试强制将第一个参数转换为字符串。 String(obj)
返回 "[object Object]"
,不能被解析,但是String([21,23])
返回 "21,23"
,parseInt
解析到无法解析的字符之前可以解析该部分。parseInt
规范:the parseInt
spec:
(将输入强制转换为字符串)。让
inputString
变为 ? ToString(string
)。
(丢弃以非数字字符开头的任何字符串部分,因此如果 S 包含不是基数 R 数字的代码单元,则 Z 为 S 中第一个这样的代码单元之前的所有代码单元组成的子字符串;否则,Z 为S。
"21,23"
-> "21"
)。
parseInt()
?我只会在两种情况下使用它,一是用于非十进制输入,二是解析已知格式的输入字符串,比如 CSS 中的"10px"
,我只需要获取其中的10
部分。我认为Number([21,22])
和一元加操作符+[21,23]
都会返回NaN
。 - nnnnnnif isNaN(parseInt(argument1))...
。 简单易懂,方便快捷。有什么问题吗?我并非轻率发言,我只是真的好奇。 - dgoargument1
是字符串“123abc”,那不是一个有效的数字,但是parseInt(“123abc”)
返回123
。如果这是您实际想要的结果,那么可以使用parseInt()
,但在我的经验中,这种情况相当罕见(我已经给出了一个例子,在那种情况下确实有意义)。如果您想测试函数参数是否已经是一个数字(而不是对象或数组),则可以使用typeof
运算符。 - nnnnnn