どうして+=
文字列で使用できるのに使用できないの-=
ですか?
例えば...
var test = "Test";
var arr = "⇔"
test += arr;
alert(test); // Shows "Test⇔"
test -= arr;
alert(test); // Shows "NaN"
どうして+=
文字列で使用できるのに使用できないの-=
ですか?
例えば...
var test = "Test";
var arr = "⇔"
test += arr;
alert(test); // Shows "Test⇔"
test -= arr;
alert(test); // Shows "NaN"
簡単な答えは、文字列を処理するように定義されていないということです。
より長い答え:2つの文字列に対して減算演算子を試すと、最初にそれらを数値にキャストしてから、算術演算を実行します。
"10" - "2" = 8
数値以外のものを試してみると、NaN関連のエラーが発生します。
"AA" - "A" = NaN
演算子は+
文字列を連結しますが、-
演算子は互いに数値を減算するだけだからです。
理由については、おそらく、文字列を互いに減算するときに人々が何をしたいのかを判断するのが難しいためです。
例えば:
"My string is a very string-y string" - "string"
これは何をすべきですか?
すでに述べたように、-=
演算子は文字列を処理するためにオーバーロードされておらず、数値のみを処理します。
文字列で使用しようとすると、演算子は両方のオペランドをに変換しようとします。これが、次のNumber
理由で取得される理由ですNaN
。
isNaN(+"foo"); // true
文字列のarr
内容を削除するには、次のように置き換えます。test
var test = "Test",
arr = "⇔"
test += arr;
alert(test); // Shows "Test⇔"
test = test.replace(arr, ""); // replace the content of 'arr' with "" on 'test'
alert(test); // Shows "Test"
これは、マイナス記号が有効な文字列演算子ではないのに対し、プラス記号は数値(加算演算子)と文字列(連結演算子)の両方を処理するためにオーバーロードされているためです。
これからどのような結果を得たいと思っていましたか?
一般に、プログラミング言語は文字列の減算を定義しません。+ =はそもそも実際には加算ではなく、連結です。
+(プラス記号)は文字列連結演算子でもあるため、-(マイナス記号)は減算にのみ適用されます。JavaScriptが2つの文字列を一緒に追加できる場合は文句を言いませんが、2つの文字列を減算しようとしても、意味がありません。