问题描述
任何人都可以解释这使得什么有效吗?数组中的字符串乘以得出的结果就像数组或字符串都没关系。
方程式
["155"] * 100 = 15500
解决方法
当使用仅对数值有意义的东西来操作非数字值时,例如*
或/
或%
-JS试图强制非数字值转换成数值Number(['155'])
变成155
。很奇怪,但是合法。通常,如果您看到依赖于此类代码的代码,则是值得重构的错误代码。
规范here ApplyStringOrNumericBinaryOperator中对此行为进行了描述:
- 让隆姆成为? ToNumeric(lval)。
- 让朗姆酒成为? ToNumeric(rval)。
(...对lnum和rnum进行计算)
如果无法将值转换为合理的数字(例如'a'
),则会得到NaN
,但不会引发错误。
["155"]
变成数字155
是因为,当["155"]
转换为基元时,它由,
s连接:["155"].join(',')
导致字符串'155'
。然后将该原语转换为数字155
。
包含多于一项的数组不能转换为数字,因为逗号不是有效的数字字符:
const arr = [1,2];
console.log(
String(arr),Number(arr)
);