为什么js运算符"+"?

为什么 +’11’可以转化成数字11,
而 1 + ’11’ 结果却是 ‘111’ 字符串?

由于在 ES6 之前就是这样的答案,所以本答案从 ES5 中获取。

+’11’

答案来源:ECMAScript5.1 11.4.6

一元 + 操作将其操作值转换为数字,别问为什么,规范上定义的。

1 + ’11’

答案来源:ECMAScript5.1 11.6.1

加法操作的步骤:

  1. 将左右两值先转换为元类型(如字符串、数字);比如布尔会转为数字,对象通常情况转为字符串等;

  2. 加起来

    1. 若左值或右值转换后的值任一为字符串,则将两边的值都转为字符串作拼接操作;

    2. 否则,将左值和右值都转为数字,然后对数字作加法操作;(如布尔型转换元类型就不是字符串,而仍然是布尔,所以在这里判断走该分支,则将布尔转为数字 1 或 0)

  3. 返回结果。

javascript 是弱类型语言,这是一个原因。再有,如果 + 和数字放在一起,被认为是数字的正数,例如 var a = +11 等同于 var a = 11。这样,而 + 只有在字符串拼接时才会作为拼接的运算符。而 + '11'就不算是拼接字符串,因为根本没有拼接字符串。所以 js 会将 '11' 隐性的转换为 11

我也是 js 的初学者。这是我的理解。如果不对的话欢迎大神指正。

+’11’ —–> 一元运算符

The unary + operator converts its operand to Number type.

1+’11’ —-> 加法运算符

如果其中一个操作数为字符串类型,那么转换另外一个操作数为字符串,并返回两个字符串 联结的结果。

+'11'+ 是正负的正,相当于 Number('11')

1 + '11' 是加减的加,调用了内部的 toPrimitive 方法比较,其中一方是字符串的时候会尝试调用另一方的 toString 方法

  • JS中,一个元素scrollIntoView会导致页面上position:fixed元素闪动(重绘?)的问题
  • 怎么实现无referer跳转
  • 急急急!!!jquery 怎么把字符串的1/6变成可以用于计算的数字?
  • html5实现鼠标悬停图片放大效果,圆形框不动,里面的图片放大?
  • 音频加载问题
  • 百度图片切换图片时url会改变,但无刷新,没用hash,IE8也支持,请问是用了什么技术?
  • js中utc和gmt+8 时间相互转换
  • JS有没有类似C语言中的%s、%d
  • video自定义的进度条在一部分移动浏览器可以看到。但是在一部分移动浏览器是默认的进度条
  • JavaScript 怎么不创建新对象 直接调用方法?
  • 一个按键怎么触发另一个按键事件