Heim > Fragen und Antworten > Hauptteil
Warum kann +'11' in die Zahl 11 umgewandelt werden,
aber das Ergebnis von 1 + '11' ist die Zeichenfolge '111'?
淡淡烟草味2017-06-12 09:25:43
由于在 ES6 之前就是这样的答案,所以本答案从 ES5 中获取。
答案来源:ECMAScript5.1 11.4.6
一元 +
操作将其操作值转换为数字,别问为什么,规范上定义的。
答案来源:ECMAScript5.1 11.6.1
加法操作的步骤:
将左右两值先转换为元类型(如字符串、数字);比如布尔会转为数字,对象通常情况转为字符串等;
加起来
若左值或右值转换后的值任一为字符串,则将两边的值都转为字符串作拼接操作;
否则,将左值和右值都转为数字,然后对数字作加法操作;(如布尔型转换元类型就不是字符串,而仍然是布尔,所以在这里判断走该分支,则将布尔转为数字 1 或 0)
返回结果。
阿神2017-06-12 09:25:43
javascript
是弱类型语言,这是一个原因。再有,如果 +
和数字放在一起,被认为是数字的正数,例如 var a = +11
等同于 var a = 11
。这样,而 +
只有在字符串拼接时才会作为拼接的运算符。而 + '11'
就不算是拼接字符串,因为根本没有拼接字符串。所以 js
会将 '11'
隐性的转换为 11
。
我也是 js
的初学者。这是我的理解。如果不对的话欢迎大神指正。
仅有的幸福2017-06-12 09:25:43
+'11' -----> 一元运算符
The unary + operator converts its operand to Number type.
1+'11' ----> 加法运算符
如果其中一个操作数为字符串类型,那么转换另外一个操作数为字符串,并返回两个字符串 联结的结果。
漂亮男人2017-06-12 09:25:43
+'11'
的 +
是正负的正,相当于 Number('11')
1 + '11'
是加减的加,调用了内部的 toPrimitive
方法比较,其中一方是字符串的时候会尝试调用另一方的 toString
方法