一个奇怪的问题,求老司机解答
发布于 6 年前 作者 fattypiggy 2607 次浏览 来自 问答

直接上图 QQ20180117-215144@2x.jpg 最近回顾犀牛书的时候看到这个问题,书上写的比较抽象,想知道

  1. ‘+’和’-’运算符有什么区别?
  2. '+'运算符转string优先还是number优先?

谢谢💪💪

2 回复

就好像这样

console.log(1 + "1") // 11
console.log(1 - "1") // 0

看着情况

好像是这样:

  • +运算符: 全是number类型,直接运算,如果不是,那么toString
  • -运算符: 把各项转成数字,在减

坐等楼下列出规范

这种事,直接找源码就好了。

首先, + 或 - ,都是转成 Object 处理的: https://github.com/v8/v8/blob/eff39bbb70e92dd8115f1ac8e3b48b5c53ad0a35/src/runtime/runtime-operators.cc#L39

然后, + 和 - ,的具体处理,逻辑上本来就不同:https://github.com/v8/v8/blob/f2bd913cd459854894447f5422a953d23fa4e7ba/src/objects.cc#L666

可以看到, - 只是单纯的转成数字,而 + 则涉及字符串连接。

v8 的实现是这样的。

我不熟悉 v8 的源码,只是随便搜索了一下。

回到顶部