私はこのスニペットに戸惑っています:
var n1 = 5-"4";
var n2 = 5+"4";
alert(n1);
alert(n2);
n1が1であることを理解しています。これは、マイナス演算子が文字列「4」を数値に変換し、5から減算するためです。しかし、+演算子の場合に54が得られるのはなぜですか。
+演算子と=演算子のこの違いを誰かが私に説明できますか?
私はこのスニペットに戸惑っています:
var n1 = 5-"4";
var n2 = 5+"4";
alert(n1);
alert(n2);
n1が1であることを理解しています。これは、マイナス演算子が文字列「4」を数値に変換し、5から減算するためです。しかし、+演算子の場合に54が得られるのはなぜですか。
+演算子と=演算子のこの違いを誰かが私に説明できますか?
型変換により+
、文字列を含む式は文字列になります。したがって、連結を実行する前に、すべてのオペランド(この場合5
)が文字列に変換されます。
-
一方、単なる算術オペランドであるため"4"
、整数に変換され、期待どおりに計算が実行されます。
n2
は、+
が加算ではなく連結として扱われているためです。したがって、文字列に5
変換されて連結され、「54」が得られます。"5"
"4"
のいずれかの側に文字列がある場合、+
は+
文字列連結演算子と見なされ、もう一方の側は文字列に変換されてから連結を実行します。
そして、のようなものに注意してください。1+2+'3'
結果はでは'33'
なくです'123'
。
-
演算子の意味は1つだけです。つまり、数値の減算(または否定、その場合は数値への変換)です。+
ただし、演算子の場合、数値の加算と文字列の連結の2つがあります。演算子のオペランドの1つが+
文字列の場合、数値の加算ではなく文字列の連結を行います。
ただし、プロセス全体はそれよりも少し複雑であり、たとえば、ここでもう少し学ぶことができるアルゴリズムが含まれます。
+
演算子は文字列演算子でもあります。javascriptのほとんどすべての基本型変数は、文字列表現でも解釈できます。あなたは54を得て5から4を付けているだけです。
-
演算子は文字列演算子ではないため、コンパイラは「4」を数値として解釈しようとし、1を取得します。
Javascriptは、数値として5、文字列として「4」を取ります。javascript +演算子は、2つのことを連結するために使用します。追加したい場合は、parseIntを使用してください。
var n1 = 5-"4";
var n2 = parseInt(5)+parseInt("4");
alert(n1);
alert(n2);