8

次の JavaScript のすべての式は非常に明白です。

var x = 10 + 10;

の値はxです20

x = 10 + '10';

xこの場合の値は、演算子がオーバーロードされている1010ためです。+オペランドのいずれかが文字列型の場合、文字列連結が行われ、すべてのオペランドが数値の場合、加算が実行されます。

x = 10 - 10;
x = 10 - '10';

どちらの場合も、実際の減算が実行される前でない場合、演算子がそのようにオーバーロードされておらず、すべてのオペランドが数値に変換さxれる0ため、の値はになり-ます(とにかく私が間違っている場合は明確にすることができます) .


次の式で何が起こるか。

x = '100' - -'150';    

の値はxです250。これも明らかですが、この式は次の式と同じように見えます。

x = '100' +'150';

その場合、これら 2 つの文字列は連結され、 に割り当て100150られxます。では、この場合、なぜ加算が行われるのでしょうか。


編集 :

+'10' + 5リターン15'a' + + 'b'リターンaNaN。誰かが理由を知っていますか?

4

5 に答える 5

3

+ 演算子と - 演算子は、文字列に対して異なる反応を示します。

+ 演算子は文字列を連結します。ただし、- 演算子はその逆 (文字列の分割) を行いません。

したがって、JavaScript がを検出'100' +'150'すると、「+ の付いた文字列が表示されます...それらを連結できます」と判断します。

JS が'100' - -'150'を参照すると、「やあ、文字列に - が付いているのが見えます。文字列関数を実際には実行できないので、それらを数値として扱います...」と考えます。

于 2012-10-19T20:50:09.467 に答える
3

あなたの場合- -は と同等になるために最初に評価されません+-"150"は数値として評価されるので、 になりまし-150た。

文字列 ( ) を減算することはできないためNaN、JS は"100"数値を取得して作成し、それを実行します100--150これは 250 です。

重要なのは、文字列型を減算できないため、これらの文字列を数値に変換することです。

于 2012-10-19T20:45:07.560 に答える
2

単項-演算子は常にそのオペランドを Number に変換します (ECMA-262 s. 11.4.6)。そう

x = '100' - -'150';

と同等です

x = '100' - -150;

さらに減少する

x = 100 - -150;

二項-演算子も常にそのオペランドを Number に変換するためです (s. 11.6.2)。

対照的に、単項+演算子は、いずれかがすでに文字列である場合、そのオペランドを文字列に変換します (s. 11.6.1)。

ECMAscript (および Javascript のコア) の完全な仕様は、http: //www.ecma-international.org/publications/standards/Ecma-262.htm にあります。

于 2012-10-19T20:49:58.350 に答える
1

マイナス演算子が文字列で使用されている場合、JS は最初にそれを数値に型キャストしてから式を評価します。これは、マイナス演算子が算術演算にのみ使用されるためです。プラス演算子は、最初に連結を意味し、次に加算を意味します。

PHP のような他の弱い型付けの言語では、連結と加算に 2 つの異なる演算子を使用することで、このあいまいさが解消されます。

ただし、文字列に対して算術演算を使用する適切な方法は、文字列を手動で数値に型キャストすることです ( parseIntを使用)。

于 2012-10-19T20:55:06.557 に答える