我正在阅读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?
答案 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的不同之处在于,使用逻辑运算而不是逻辑运算。
如果7
(3+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
因为在字符串前面放置+会将字符串变量转换为数字。
答案 7 :(得分:0)
这很令人困惑,但是二进制+似乎是一种很难将数字强制转换为字符串的情况。在大多数情况下,情况恰恰相反(因此很容易想到您不必对类型太挑剔)
4+“ 3” =“ 43”
4-“ 3” = 1