JavaScript 将字符串添加到数字

IT技术 javascript string numbers operators
2021-02-14 09:07:33

我正在阅读MDN 上对 JavaScript重新介绍,在Numbers部分,它说您可以通过在字符串前面添加加号运算符将字符串转换为数字。

例如:

+"42" 这将产生 42 的数字输出。

但是在关于运算符的部分进一步说明,通过向任何数字添加字符串“某物”,您可以将该数字转换为字符串。他们还提供了以下让我感到困惑的示例:

"3" + 4 + 5 大概会在输出中产生一个 345 的字符串,因为数字 4 和 5 也会被转换为字符串。

但是, 3 + 4 + "5" 不会产生数字 12 而不是如示例中所述的字符串 75 吗?

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

6个回答

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

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

> 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
减号,另一方面并不是那么特别。所以"2" - 1返回1,但"2" + -1返回"2-1"调试你的心!:P
2021-04-18 09:07:33
@epascarello 我得到了操作顺序,我只是被 MDN 网站上的以下句子弄糊涂了:“如果将字符串添加到数字(或其他值),则所有内容都会首先转换为字符串。” 它没有说明它的转换顺序。此外,以下句子更增加了混乱:“向某物添加空字符串是转换它的一种有用方法。” 它并没有说只有在 JavaScript 检测到它是字符串之后它才会将所有内容转换为字符串,并且它之前的所有内容都将保持不变。无论如何,谢谢你的帮助。
2021-04-21 09:07:33
@SineLaboreNihil 在(+ + "5"))第一个是add第二个用于将"5"字符串类型5化为 int ..读取链接
2021-04-25 09:07:33
那么这是否意味着当一个字符串与其他数字组合时,它会将所有其他数字转换为字符串,除非我特别在它前面放了另一个 + 运算符(基本上是两个 + 运算符(+ +“5”))然后然后才, JavaScript 会将字符串中的内容解释为数字吗?
2021-04-30 09:07:33
@poshest - 实际上,"unary -"行为与"unary +". "2" + +1会将数字转换+1为字符串(因此"1"),然后连接两个字符串。您的示例将数字-1转换为字符串(因此"-1"),然后连接两个字符串。这是相当一致的。
2021-05-02 09:07:33

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

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

我认为这比使用 +"3" 更干净,但这只是我的意见。

答案可以在 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"

要阅读整个标准,请转到此处

当您查看ES5 规范中加法运算符 ( + ) (§11.6.1) 中的第 7 步和“注释 2”时

它说

如果 Type(lprim) 是 String`Type(rprim) 是 String,则返回作为连接 ToString(lprim) 后跟 ToString(rprim) 的结果的 String


注 2:步骤 7 与关系运算符(11.8.5)的比较算法的步骤 3 不同,使用逻辑或运算代替逻辑与运算。

意思是7( 3+4) "5"( ||not&& )typeof "string" toString()应用于两个操作数。

所以加法实际上应用于

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

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

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

这总是工作正常。

1 + (+"2") = 3

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

在这里小提琴:http : //jsfiddle.net/xuVur/2/