意外的乘法行为 方程式

问题描述

任何人都可以解释这使得什么有效吗?数组中的字符串乘以得出的结果就像数组或字符串都没关系。

方程式

["155"] * 100 = 15500

解决方法

当使用仅对数值有意义的东西来操作非数字值时,例如*/%-JS试图强制非数字值转换成数值Number(['155'])变成155。很奇怪,但是合法。通常,如果您看到依赖于此类代码的代码,则是值得重构的错误代码。

规范here ApplyStringOrNumericBinaryOperator中对此行为进行了描述:

  1. 让隆姆成为? ToNumeric(lval)。
  2. 让朗姆酒成为? ToNumeric(rval)。

(...对lnum和rnum进行计算)

如果无法将值转换为合理的数字(例如'a'),则会得到NaN,但不会引发错误。

["155"]变成数字155是因为,当["155"]转换为基元时,它由, s连接:["155"].join(',')导致字符串'155'。然后将该原语转换为数字155

包含多于一项的数组不能转换为数字,因为逗号不是有效的数字字符:

const arr = [1,2];
console.log(
  String(arr),Number(arr)
);