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

时间:2019-06-14 11:37:31

标签: javascript

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

[5]被认为是一个数字,可以与+-/等数字运算符一起使用,并赋予{{ 1}}。

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

例如

5

给予

parseFloat

1 个答案:

答案 0 :(得分:24)

-运算符尝试将其周围的表达式强制转换为数字。 [5]转换为基元时(由,连接所有元素),其结果为'5',可以清楚地转换为数字而不会出现问题。

请参见spec

  

AdditiveExpression:AdditiveExpression-MultiplicativeExpression

     
      
  1. 让lref成为评估AdditiveExpression的结果。
  2.   
  3. 让lval为GetValue(lref)。
  4.   
  5. ReturnIfAbrupt(lval)。
  6.   
  7. 让rref成为计算MultiplicativeExpression的结果。
  8.   
  9. 让rval为GetValue(rref)。
  10.   
  11. ReturnIfAbrupt(rval)。
  12.   
  13. 让lnum为ToNumber(lval)。
  14.   
  15. ReturnIfAbrupt(lnum)。
  16.   
  17. 让rnum为ToNumber(rval)。
  18.   
  19. ReturnIfAbrupt(rnum)。
  20.   
  21. 返回对lnum和rnum应用减法运算的结果。请参阅下面的注释12.7.5。
  22.   

对于ToNumber does,如果是对象:

  
      
  1. 让primValue为ToPrimitive(参数,提示编号)。
  2.   
  3. 返回Number(primValue)。
  4.   

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