为什么JavaScript评估plus的字符串和整数与minus值不同?为什么JavaScript在int和字符串上操作时评估正负不同
一个例子:
console.log(1+"1");
console.log(1-"1");
第一行打印“11”,并且第二打印0
为什么JavaScript评估plus的字符串和整数与minus值不同?为什么JavaScript在int和字符串上操作时评估正负不同
一个例子:
console.log(1+"1");
console.log(1-"1");
第一行打印“11”,并且第二打印0
由于加号隐含转换1为字符串
并隐式减号将“1”转换为int。
每请求
TL;博士; ECMA 5规范指出,如果运算符的左侧或右侧是一个字符串,则返回concatenating的字符串结果。凡为减号来的电话号码,只是工作,以便就双方转换为数字
11.6.1加法运算符(+)#ⓉⓇⒼ 加法运算或者执行字符串连接或数字加成。
生产AdditiveExpression:
令LREF是评估AdditiveExpression的结果:AdditiveExpression + MultiplicativeExpression如下评价。
让lval成为GetValue(lref)。
让rref是评估MultiplicativeExpression的结果。
设rval为GetValue(rref)。
让lprim ToPrimitive(lval)。
设rprim为ToPrimitive(rval)。
如果Type(lprim)是字符串或类型(rprim)的字符串,然后 返回字符串即串联接着的ToString(rprim)的ToString(lprim)
返回应用的结果的结果ToNumber(lprim)和ToNumber(rprim)的附加操作。请参阅下面的注释11.6.3。
注1:在步骤5和6中调用ToPrimitive时不提供任何提示。除Date对象外,除Date对象外的所有本机ECMAScript对象都处理缺少提示,就像提供了提示Number;日期对象处理缺少提示,就像提供了提示字符串一样。主机对象可能会以其他方式处理缺少提示。
注2步骤7不同于关系运算符(11.8.5)的比较算法的步骤3,通过使用逻辑或操作而不是逻辑和操作。
11.6.2减法运算符( - )#Ⓣ 生产AdditiveExpression:AdditiveExpression - MultiplicativeExpression如下评价:
令LREF是评估AdditiveExpression的结果。
让lval成为GetValue(lref)。
让rref是评估MultiplicativeExpression的结果。
设rval为GetValue(rref)。
让lnum为ToNumber(lval)。
让rnum为ToNumber(rval)。
返回对lnum和rnum应用减法运算的结果。请参阅下面的注释11.6.3。
您是否有解释详细工作原理的来源,以及具体的规则是什么? –
+
运算符给出了字符串的特定含义,但运算符不是-
。因此,当您尝试使用+
运算符并且其中一个操作数是字符串时,JavaScript会将该整数转换为字符串,然后进行连接而不是加法。但是,当您使用-
运算符时,由于该运算符没有使用字符串定义的行为,因此JavaScript会将该字符串转换为整数,然后进行减法运算。
因为用作二元运算符时'+'只是具有多个含义。 – Xufox