Javascript String Assignment Operators

倖福魔咒の 提交于 2019-12-01 14:35:25

问题


How come I can use += on a string, but I cannot use -= on it?

For example...

var test = "Test";
var arr = "⇔"

test += arr;
alert(test);  // Shows "Test⇔"

test -= arr;
alert(test);  // Shows "NaN"

回答1:


The short answer is - it isn't defined to work with strings.

Longer answer: if you try the subtraction operator on two strings, it will first cast them to numbers and then perform the arithmetic.

"10" - "2" = 8

If you try something that is non-numeric, you get a NaN related error:

"AA" - "A" = NaN



回答2:


Because the + operator concatenates strings, but the - operator only subtracts numbers from each other.

As to the why -- probably because it is difficult to determine what people want to do when they subtract strings from each other.

For example:

"My string is a very string-y string" - "string"

What should this do?




回答3:


As all said, the -= operator is not overloaded to work with Strings, it only works with Numbers.

If you try to use it with strings, the operator will try to convert both operands to Number, that is why you are getting NaN, because:

isNaN(+"foo"); // true

To get rid of the arr content on your test string, you can replace it:

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"



回答4:


That's because the minus sign is not a valid String operator, whereas the plus sign is overloaded to handle both Numbers (addition operator) and Strings (concatenation operator).

What results were you hoping to get from this?




回答5:


Generally, programming languages don't define subtraction for strings. += isn't really addition in the first place, it's concatenation.




回答6:


Because the +(plus sign) is also the string concatenation operator, while the -(minus sign) only applies to subtraction. If JavaScript can append 2 strings together it won't complain, but if you try to subtract 2 strings, it just doesn't make any sense.



来源:https://stackoverflow.com/questions/1751225/javascript-string-assignment-operators

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!