在使用isNumeric
函数时,我发现了这种极端情况:
[5]
被认为是一个数字,可以与+
,-
,/
等数字运算符一起使用,并赋予{{ 1}}。
为什么JavaScript会将单个值数组转换为数字?
例如
5
给予
parseFloat
答案 0 :(得分:24)
-
运算符尝试将其周围的表达式强制转换为数字。 [5]
转换为基元时(由,
连接所有元素),其结果为'5'
,可以清楚地转换为数字而不会出现问题。
请参见spec:
AdditiveExpression:AdditiveExpression-MultiplicativeExpression
- 让lref成为评估AdditiveExpression的结果。
- 让lval为GetValue(lref)。
- ReturnIfAbrupt(lval)。
- 让rref成为计算MultiplicativeExpression的结果。
- 让rval为GetValue(rref)。
- ReturnIfAbrupt(rval)。
- 让lnum为ToNumber(lval)。
- ReturnIfAbrupt(lnum)。
- 让rnum为ToNumber(rval)。
- ReturnIfAbrupt(rnum)。
- 返回对lnum和rnum应用减法运算的结果。请参阅下面的注释12.7.5。
对于ToNumber
does,如果是对象:
- 让primValue为ToPrimitive(参数,提示编号)。
- 返回Number(primValue)。
导致ToPrimitive,在数组上调用toString
,导致Array.prototype.toString,其调用.join
。