为什么JavaScript(强制)中1 +'1'='11'和1 - '1'= 0?

Nan*_*ali 10 javascript

这似乎在其逻辑中非常明显(字符串不能减去)但我想知道如何在JavaScript的底层执行中做出这个决定.在这里如何应用强制规则?

Zet*_*eta 12

-是按照术语定义的ToNumber,而对字符串+有一个额外的条款(强调我的):

11.6.1加法运算符(+)

加法运算符执行字符串连接或数字加法.

生产

AdditiveExpression : AdditiveExpression +  MultiplicativeExpression 
Run Code Online (Sandbox Code Playgroud)

评估如下:

  1. 让我们lref评估的结果AdditiveExpression.
  2. 我们lvalGetValue(lref).
  3. 让我们rref评估的结果MultiplicativeExpression.
  4. 我们rvalGetValue(rref).
  5. 我们lprimToPrimitive(lval).
  6. 我们rprimToPrimitive(rval).
  7. 如果Type(lprim)String或者Type(rprim)String,则
    • 返回串联ToString(lprim)后跟的结果字符串ToString(rprim)

[...]

  • 我更喜欢[**this**](http://es5.github.io/#x11.6.1)规范的颜色和样式,以便于阅读(这只是个人偏好)http:// es5.github.io/#x11.6.1 (2认同)