JavaScript将字符串添加到数字中

时间:2013-05-13 12:57:36

标签: javascript string numbers operators

我正在阅读re-introduction to JavaScript on MDN,在 Numbers 部分,它表示只需在其前面添加一个加号运算符即可将字符串转换为数字。

例如:

+“42”将产生42的数字输出。

但是在关于 Operators 的部分中,它说通过向任何数字添加字符串“something”,您可以将该数字转换为字符串。他们还提供了以下让我困惑的例子:

“3”+ 4 + 5可能会在输出中产生345的字符串,因为数字4和5也会转换为字符串。

但是,3 + 4 +“5”不会产生12的数字而不是字符串75,如他们的例子中所述?

在关于运算符的部分的第二个例子中,不是站在字符串“5”前面的+运算符将该字符串转换为数字5,然后将所有内容添加到等于12?

8 个答案:

答案 0 :(得分:35)

你所说的是一元加。它与字符串连接或添加使用的加号不同。

如果您想使用一元加号进行转换并将其添加到之前的值,则需要将其加倍。

> 3 + 4 + "5"
"75"
> 3 + 4 + +"5"
12

编辑:

您需要了解操作顺序:

+-具有相同的优先级并且与左侧相关联:

 > 4 - 3 + 5
 (4 - 3) + 5
 1 + 5
 6

+再次与左边相关联:

> 3 + 4 + "5"
(3 + 4) + "5"
7 + "5"
75

一元运算符通常比二元运算符具有更强的优先级:

> 3 + 4 + +"5"
(3 + 4) + (+"5")
7 + (+"5")
7 + 5
12

答案 1 :(得分:4)

您也可以使用parseInt()或parseFloat(),如下所示:

> 1 + 2 + "3"
"33"
> 1 + 2 + parseInt(3)
6

我认为这比使用+“3”更清晰,但这只是我的观点。

答案 2 :(得分:4)

答案可以在Ecma262.pdf第11.6.1节中找到:

  

如果Type(lprim)是String或Type(rprim)是String,那么a。归还   紧接着连接ToString(lprim)的结果的字符串   通过ToString(rprim)。

这样就可以根据优先级解决所有操作,这样一旦找到任何数字的字符串,该数字就会被转换为字符串。

4 + 3 + "5"
"75"
4 + 3 + "5" + 3
"753"

要阅读整个标准,请转到here

答案 3 :(得分:2)

当您在ES5规范中查看The Addition operator ( + )(§11.6.1)的第7步和“注2”时,

它说

  

如果Type(lprim)是String` Type(rprim)是String,那么   返回串联ToString(lprim)后跟ToString(rprim)的结果的字符串


  

注2:步骤7与关系运算符(11.8.5)的比较算法的步骤3的不同之处在于,使用逻辑运算而不是逻辑运算。

如果73+4 "5" ||不是&& ,则含义)typeof "string" toString()应用于两个操作数。

所以添加实际上应用于

"7""5" - > "7" + "5" //"75"

答案 4 :(得分:1)

在3 + 4 +" 5"的例子中 - Javascript解析器将执行(3 + 4)+" 5",因为3 + 4是第一个 - 所以它将添加3 + 4因为它们是数字,然后连接字符串" 5& #34 ;.

答案 5 :(得分:1)

在Javascript中添加数字和字符串时,结果始终为字符串。

在此处查看实验 - http://jsfiddle.net/xuVur/1/

var a = "3" + 4 + 5;
var b = 3 + 4 + "5";

$("#result1").html(a); // prints 345
$("#result2").html(b); //prints 75

答案 6 :(得分:1)

javascript中的一个smple +运算符用于连接而不是添加。

字符串格式整数变量之前的括号和+运算符每次都会完成这项工作。

这总是很好。

1 + (+"2") = 3

因为在字符串前面放置+会将字符串变量转换为数字。

在这里摆弄:http://jsfiddle.net/xuVur/2/

答案 7 :(得分:0)

这很令人困惑,但是二进制+似乎是一种很难将数字强制转换为字符串的情况。在大多数情况下,情况恰恰相反(因此很容易想到您不必对类型太挑剔)

4+“ 3” =“ 43”

4-“ 3” = 1