为了账号安全,请及时绑定邮箱和手机立即绑定

为什么JavaScript处理字符串和数字之间的加号和减号运算符的方式不同?

为什么JavaScript处理字符串和数字之间的加号和减号运算符的方式不同?

qq_笑_17 2019-08-05 15:20:03
为什么JavaScript处理字符串和数字之间的加号和减号运算符的方式不同?我不明白为什么JavaScript以这种方式工作。console.log("1" + 1);console.log("1" - 1);第一行打印11,第二行打印0.为什么JavaScript将第一行作为字符串处理,第二行作为数字处理?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

它可以表示“连接”  “添加”。由于一边是一个字符串,它被认为是“连接”,因此结果是11(顺便说一下,这是我小时候最喜欢的笑话之一。那和“1 + 1 =窗口”,如同视觉上示出:│┼│ ニ ⊞

-但是只有一个含义:减去。所以它减去了。

这种问题在其他语言中并不存在,例如PHP,其中“连接” .代替+,不会产生歧义。像MySQL这样的其他语言甚至没有连接运算符,而是使用CONCAT(a,b,c...)


查看完整回答
反对 回复 2019-08-05
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

因为规范明确告诉这样做。第75页。注意11.6.1步骤5-8和11.6.2步骤5-7之间的区别。

11.6.1 - 描述加法运算符的工作原理

1-4。...

5。设lprim为ToPrimitive(lval)。

6。设rprim为ToPrimitive(rval)。

7。如果Type(lprim)是String或Type(rprim)是String,那么

7a。返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串

8。将添加操作的结果返回到ToNumber(lprim)和ToNumber(rprim)

11.6.2 - 描述减法运算符的工作原理

1-4。...

5。让lnum为ToNumber(lval)。

6。设rnum为ToNumber(rval)。

7。将减法运算的结果返回到lnum和rnum

总结 在添加的情况下,如果转换为原始值而没有任何提示的任何操作数突然变为字符串,则第二个操作数也将转换为字符串。在减法的情况下,两个操作数都被转换为数字。


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 1046 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号