10

为什么我可以+=在字符串上使用,但我不能-=在其上使用?

例如...

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

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

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

6 回答 6

13

简短的回答是 - 它没有被定义为使用字符串。

更长的答案:如果您在两个字符串上尝试减法运算符,它将首先将它们转换为数字,然后执行算术。

"10" - "2" = 8

如果你尝试一些非数字的东西,你会得到一个与 NaN 相关的错误:

"AA" - "A" = NaN
于 2009-11-17T19:39:49.137 回答
7

因为+运算符连接字符串,但-运算符仅将数字相减。

至于为什么——可能是因为很难确定人们在相互减去字符串时想要做什么。

例如:

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

这应该怎么做?

于 2009-11-17T19:39:19.127 回答
3

如上所述,-=运算符不会重载以使用字符串,它仅适用于数字。

如果您尝试将它与字符串一起使用,则运算符将尝试将两个操作数都转换为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"
于 2009-11-17T20:20:15.387 回答
1

这是因为减号不是有效的字符串运算符,而加号被重载以处理数字(加法运算符)和字符串(连接运算符)。

你希望从中得到什么结果?

于 2009-11-17T19:38:32.013 回答
0

通常,编程语言不定义字符串的减法。+= 并不是真正的加法,而是串联。

于 2009-11-17T19:38:08.270 回答
0

因为+(加号)也是字符串连接运算符,而-(减号)只适用于减法。如果 JavaScript 可以将 2 个字符串附加在一起,它不会抱怨,但如果你尝试减去 2 个字符串,它就没有任何意义。

于 2009-11-17T19:39:17.567 回答