36

私はMDN の JavaScript の再紹介を読んでいましたが、数値のセクションで、文字列の前にプラス演算子を追加するだけで文字列を数値に変換できると書かれていました。

例えば:

+"42" とすると、42 という数値が出力されます。

しかし、さらに演算子に関するセクションでは、文字列「何か」を任意の数値に追加することで、その数値を文字列に変換できると述べています。彼らはまた、私を混乱させた次の例を提供します:

数値 4 と 5 も文字列に変換されるため、"3" + 4 + 5 はおそらく出力で 345 の文字列を生成します。

しかし、3 + 4 + "5" は、例で述べた文字列 75 ではなく、12 という数値を生成しませんか?

演算子に関するセクションのこの 2 番目の例では、文字列 "5" の前にある + 演算子は、その文字列を数値 5 に変換し、すべてを合計して 12 に等しくなりませんか?

4

8 に答える 8

50

あなたが話しているのは単項プラスです。文字列の連結や加算で使用されるプラスとは異なります。

単項プラスを使用して変換し、前の値に追加する場合は、2 倍にする必要があります。

> 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
于 2013-05-13T13:00:02.070 に答える
6

次のように、parseInt() または parseFloat() を使用することもできます。

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

+"3" を使用するよりもはるかにクリーンだと思いますが、それは私の意見です。

于 2013-05-13T13:02:24.303 に答える
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"

規格全体を読むには、ここにアクセスしてください。

于 2013-05-13T13:07:36.897 に答える
2

JavaScript の単純な + 演算子は、連結に使用され、加算には使用されません。

文字列形式の整数変数の前のブラケットと + 演算子は、毎回仕事をします。

これは常に正常に機能します。

1 + (+"2") = 3

文字列の前に + を配置すると、文字列変数が数値に変換されるためです。

ここでフィドル:http://jsfiddle.net/xuVur/2/

于 2014-09-03T02:58:54.937 に答える