Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么1+';1';=';11';但是1*';1';=1._Javascript - Fatal编程技术网

Javascript 为什么1+';1';=';11';但是1*';1';=1.

Javascript 为什么1+';1';=';11';但是1*';1';=1.,javascript,Javascript,在操作的情况下 1+“1” 数字1转换为字符串并追加 到后面的字符串,那么为什么不是这样呢 1*'1'因为+过载 +可以表示加法或字符串串联。在前一种情况下,JavaScript尝试进行字符串连接而不是添加,因此它将所有内容转换为字符串并执行字符串连接。在后一种情况下,唯一的选择是乘法,因此它将所有内容转换为可以乘法的内容并执行乘法 在您的问题下的注释中链接了,这解释了为什么JS尝试字符串连接而不是添加:它检查您添加到一起的内容是否是字符串,然后如果其中至少有一个是字符串,则尝试字符串连接-否则

在操作的情况下

1+“1”

数字1转换为字符串并追加 到后面的字符串,那么为什么不是这样呢


1*'1'

因为
+
过载

+
可以表示加法或字符串串联。在前一种情况下,JavaScript尝试进行字符串连接而不是添加,因此它将所有内容转换为字符串并执行字符串连接。在后一种情况下,唯一的选择是乘法,因此它将所有内容转换为可以乘法的内容并执行乘法


在您的问题下的注释中链接了,这解释了为什么JS尝试字符串连接而不是添加:它检查您添加到一起的内容是否是字符串,然后如果其中至少有一个是字符串,则尝试字符串连接-否则,尝试添加。

+
是字符串的串联运算符。结果,该数字被转换为字符串,然后连接起来。串联优先于数字加法。如果您想让它添加它们,可以使用,比如
1+parseInt('1')

*
根本不是字符串的有效运算符,因此它将字符串转换为数字,然后执行操作

这是一个简单的情况,因此操作数的顺序无关紧要。如果你变得更复杂,它会变得更有趣。例如:

1 + 1 + '1' = '21'
'1' + 1 + 1 = '111'

有关更多信息,请查看javascript+中的

。这就是为什么当您尝试将数字(即1)添加到字符串('1')时,它会变成11。它将*视为多重处理,因此它将一个数字(1)乘以一个字符串('1'),结果为1。e、 g.(1*a=a)。

+
用于字符串连接
*
用于乘法运算

在1++中,“1”+“将1与“1”连接起来

您需要执行以下操作

1 + parseInt('1')
“+”运算符用于字符串连接和普通数学加法,因此当我们在数字和字符串之间使用此运算符时,它将仅连接这两个运算符。
但是“*”运算符不是这样的,它只会执行乘法运算,如果在数字和纯字符串之间使用它,它不会给出正确的输出。但是,如果它被用在一个数字和一个以字符串形式的数字之间,它将考虑这两个数,并给出这两个的乘法。

乘法运算符:加法运算符:将字符串乘法是没有意义的,因此操作数被转换为数字。但是串接字符串是有意义的,因此操作数被转换成字符串(这是任意的,但有文档记录的行为)。@pawel实际上字符串乘法是有意义的,例如可能有类似
3*'a'='aaa'
的东西。@Lucastrezesniewski你说得对,它可以这样工作,甚至有另一个模糊运算符也会很有趣:)但我想到了
'a'*'b'
,如果乘法中的类型转换类似于加法,就会出现这种情况。
JavaScript已经决定
不是一个真正的解释……这是一个简单的解释。在我看来,JavaScript如何处理二进制运算符的规范可能超出了这个问题的范围——重要的是它是一个重载操作。(如果你有一个同样简单但真实的解释,我很乐意改变它)10票赞成?谁来投票@马修不能决定,贡献者可以。我想这很公平。我会想出更好的话来说的!:这是更好的答案吗?我重新编写了有问题的组件,并试图解释为什么字符串串接优先。
+
还表示加法,而不仅仅是串接。是的,当它写在两个数字之间时,它被视为加法。但问题是关于一个数字和一个字符串,所以在本例中,它是在执行串联。