我只是在随机玩JavaScript。
我给它的'2'+'2'-'2'
输入。
,输出结果令人惊讶20
。
console.log('2'+'2'-'2');

现在我没有得到它。
有人向我解释为什么会这样?如何输出这个等于20
?
答案 0 :(得分:20)
'2' + '2'
是连接和添加。如果任何参数不是数字,那么它就是连接。因此,'22'
为"foo" + "bar"
- 就像"foobar"
3 + {}
一样,就像"3[object Object]"
-
一样。
'22' - '2'
只是减法。无论它的论点是什么,它们都被强迫数字。因此,22 - 2
被评估为data_0.100.txt
,即20。
答案 1 :(得分:2)
JavaScript在查找+
时执行字符串连接。所以第一个" 2"第二个" 2"制作" 22"。
但是当对字符串执行减法(-
)时,会发生强制。所以结果" 22" 强制到号码22
和最终" 2" 强制编号为2
。最后,将2
从22
减去结果20
。
更多信息:Coercion
逐步评估:
'2' + '2' - '2'
致
'22' - '2'
致
22 - 2
致20
答案 2 :(得分:2)
JavaScript中使用的机制称为coercion
。
JavaScript中的+
符号可以执行字符串连接或算术添加。那么JavaScript如何选择要执行的操作呢?
如果两个参数(在+的两侧)都是字符串,则JavaScript会执行连接。
console.log(2 + 2); // 4
console.log('2' + '2'); // '22'

但减号只有一个含义:算术减法。
因此JavaScript只有一种方法可以解释'22' - 2
,即从' 22'中减去2。但当然' 22'不是一个数字,所以JavaScript首先强迫它("强制"它)成为一个数字。
执行的实际操作是22 - 2
,可以很容易地计算出20
,即您观察到的结果。