web-dev-qa-db-ja.com

数値に文字列を追加するJavaScript

私は MDNでのJavaScriptの再紹介 を読んでいて、セクションNumbersで文字列を数字の前にプラス演算子を追加するだけです。

例えば:

+ "42"は、42の数値出力を生成します。

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

「3」+ 4 + 5は、おそらく出力で345のストリングを生成します。これは、数字の4と5もストリングに変換されるためです。

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

演算子に関するセクションのこの2番目の例では、文字列「5」の前に立っている+演算子は、その文字列を数値5に変換してから、12までのすべてを加算しませんか?

28
SineLaboreNihil

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

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

> 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
35
epascarello

答えは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 に進みます。

4
Agus

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

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

+ "3"を使用するよりもずっときれいだと思いますが、それは私の意見です。

4
Anickyan

ES5仕様の 加算演算子(+) (§11.6.1)でステップ7と「注2」を見ると、

それは言います

Type(lprim)がString`orType(rprim)がStringの場合、ToString(lprim)を連結した結果であるStringを返しますToString(rprim)


注記2ステップ7は、論理演算子および演算の代わりに論理OR演算を使用するという点で、関係演算子(11.8.5)の比較アルゴリズムのステップ3とは異なります。

_7_(_3+4_)or_"5"_(_||_ not _&&_)is _typeof "string"_ toString()は両方のオペランドに適用されます。

したがって、追加は実際に適用されます

_"7"_および_"5"_-> _"7" + "5" //"75"_

2
Moritz Roessler

3 + 4 + "5"の例では、3 + 4が最初であるため、Javascriptパーサーは(3 + 4)+ "5"を実行します。したがって、数値であるため3 + 4を追加し、文字列「5」。

1
Modul8

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
1
UnTechie

Javascriptのsmple +演算子は、連結ではなく追加に使用されます。

文字列形式の整数変数の前にあるブラケットと+演算子は、毎回ジョブを実行します。

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

1 + (+"2") = 3

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

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

1
Sanjeev Singh