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

时间:2014-09-17 14:14:31

标签: javascript

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

1 个答案:

答案 0 :(得分:11)

- is defined in terms of ToNumber,而+有一个额外的clause for strings(强调我的):

  

11.6.1加法运算符(+

     

加法运算符执行字符串连接或数字   此外。

     

制作

AdditiveExpression : AdditiveExpression +  MultiplicativeExpression 
     

评估如下:

     
      
  1. lref成为评估AdditiveExpression
  2. 的结果   
  3. lval成为GetValue(lref)
  4.   
  5. rref成为评估MultiplicativeExpression
  6. 的结果   
  7. rval成为GetValue(rref)
  8.   
  9. lprim成为ToPrimitive(lval)
  10.   
  11. rprim成为ToPrimitive(rval)
  12.   
  13. 如果Type(lprim)StringType(rprim)String,则   
        
    • 返回串联ToString(lprim)后跟ToString(rprim)
    • 的结果字符串   
  14.         

    [...]