为什么其中包含单个数字的数组被视为数字?

Man*_*avM 18 javascript

在使用isNumeric函数时,我发现了这种边缘情况:

[5]被认为是一个数,可以用数字运算符等中使用 +-/等等,并给出5时给予parseFloat

JavaScript为什么将单个值数组转换为数字?

例如

const x = [10];
console.log(x - 5, typeof x);
Run Code Online (Sandbox Code Playgroud)

5 object
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 24

-操作员试图与其周围的表达式强制为数字。[5]转换为基元(通过联接所有元素,)时,将计算为'5',可以清楚地将其转换为数字而不会出现问题。

规格

AdditiveExpression:AdditiveExpression-乘性表达式

  1. 令lref为评估AdditiveExpression的结果。
  2. 令lval为GetValue(lref)。
  3. ReturnIfAbrupt(lval)。
  4. 令rref为评估MultiplicativeExpression的结果。
  5. 令rval为GetValue(rref)。
  6. ReturnIfAbrupt(rval)。
  7. 令lnum为ToNumber(lval)。
  8. ReturnIfAbrupt(lnum)。
  9. 令rnum为ToNumber(rval)。
  10. ReturnIfAbrupt(rnum)。
  11. 将应用减法运算的结果返回给lnum和rnum。请参阅下面的注释12.7.5。

ToNumber 确实,在一个对象的情况下:

  1. 令primValue为ToPrimitive(参数,提示编号)。
  2. 返回ToNumber(primValue)。

导致ToPrimitivetoString在数组上调用,导致Array.prototype.toString,调用.join