让我们看看以下Javascript代码。
<script type="text/javascript" lang="javascript">
function test()
{
alert('2'+8);
alert(8-'2');
}
</script>
在第一个警告框中,它显示2和8串联的结果, 28 。但是,在第二个警告框中,它会显示两个数字的减法,即 6 。怎么样?
答案 0 :(得分:10)
+
运算符已超载。如果任何操作数是字符串,则执行字符串连接。如果您有两个数字,则执行添加。 -
不会以这种方式重载,所有操作数都会转换为数字。
来自规范:
11.6.1 The Addition operator ( + )
(...)
7.如果Type( lprim )是String或Type( rprim )是String,那么
- 返回串联ToString( lprim )后跟ToString( rprim )
的结果的字符串8。将添加操作的结果返回到ToNumber( lprim )和ToNumber( rprim )。
(...)11.6.2 The Subtraction Operator ( - )
(...)
5.让 lnum 为ToNumber( lval ) 6.让 rnum 为ToNumber( rval ) 7.将减法运算的结果返回到 lnum 和 rnum 。
(...)
答案 1 :(得分:4)
+
用于连接和添加,但是当与字符串一起使用时,默认为连接。 -
不能用于字符串,因此其操作数将转换为数字。
编辑:这并不意味着与上面的帖子相同! XD
答案 2 :(得分:3)
+
用于字符串连接和添加。如果operant是字符串,则使用连接。 -
仅用于减法,两个操作符总是强制转换为数字。
答案 3 :(得分:1)
1st:它将第二个操作数转换为第一个操作数(String),因为+也用于字符串连接。
第二:它将第二个操作数转换为数字,因为 - 仅用于数字操作。
答案 4 :(得分:0)
如果你不想要这个,一个简单的解决方法是:(1 *&#39; 2&#39;)+ 8 JSYK