在JavaScript中对字符串和数字进行加减操作时,是否会自动进行类型转换?

9
让我们来看下面的Javascript代码。
<script type="text/javascript" lang="javascript">
    function test()
    {
        alert('2'+8);
        alert(8-'2');
    }
</script>

在第一个警告框中,它显示了2和8的连接结果,即28。然而,在第二个警告框中,它显示了两个数字的减法运算结果,即6。为什么?


请查看http://www.quirksmode.org/js/strings.html中的“concat”示例。 - Mike Purcell
5个回答

18
+ 运算符被重载了。如果任何一个操作数是字符串,则执行字符串连接操作。如果有两个数字,则执行加法操作。- 没有被这种方式重载,所有操作数都会转换为数字。
从规范中可以得知:

11.6.1 加法运算符(+)

(...)
7. 如果 Type(lprim) 是 String 或 Type(rprim) 是 String,则

  • 返回将 ToString(lprim) 和 ToString(rprim) 连接的字符串

8. 返回应用加法运算到 ToNumber(lprim) 和 ToNumber(rprim) 的结果。
(...)

11.6.2 减法运算符(-)

(...)
5. 让 lnum 成为 ToNumber(lval)。
6. 让 rnum 成为 ToNumber(rval)。
7. 返回应用减法运算到 lnumrnum 的结果。
(...)


5

+ 既可用于字符串连接,也可用于数字相加。如果其中一个操作数是字符串,将进行字符串连接。 - 只能用于数字相减,两个操作数都会被转换为数字。


4

+ 被用于字符串的拼接和数字的相加,但是在操作字符串时默认为拼接。 - 不能被用于字符串,所以它的操作数会被转换成数字。

编辑:这篇内容不是和上面的帖子完全一致!XD


1

第一:它将第二操作数强制转换为第一操作数(字符串),因为“+”也用于字符串连接。

第二:它将第二操作数强制转换为数字,因为“-”仅用于数字运算。


0

如果你不想要这个,一个简单的解决方法是:(1*'2')+8 JSYK


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接