在处理一个isNumeric函数时,我发现了这个边缘情况:[5]被认为是一个数,可以用数字运算符等中使用 +,-,/等等,并给出5时给予parseFloat。为什么 JavaScript 将单值数组转换为数字?例如const x = [10];console.log(x - 5, typeof x);给5 object
1 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
该-
操作员试图与其周围的表达式强制为数字。[5]
,当转换为原始类型(通过 连接所有元素,
)时,计算结果为'5'
,可以清楚地转换为数字而不会出现问题。
请参阅规范:
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
确实,在一个对象的情况下:
令 primValue 为 ToPrimitive(argument, hint Number)。
返回 ToNumber(primValue)。
这导致ToPrimitive,调用toString
数组,这导致Array.prototype.toString,它调用.join
.
添加回答
举报
0/150
提交
取消