2009-11-17 125 views
8

我怎样才能在字符串上使用+=,但是我不能在其上使用-=Javascript字符串赋值操作符

例如...

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

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

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

注:我不是虚拟的;我知道你不能“减去”一个字符串。有人问我这个,我不知道如何回应,所以我在这里发布。 – 2009-11-17 19:38:56

+0

当其中一个操作数是字符串时,“+”运算符是连接运算符。 – Gumbo 2009-11-17 19:38:58

+1

只有两个运算符被定义为字符串:'+'和'+ ='(https://developer.mozilla.org/en/Core_Javascript_1.5_Reference#Operators) – 2009-11-17 19:54:02

回答

11

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

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

"10" - "2" = 8 

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

"AA" - "A" = NaN 
0

一般而言,编程语言没有为字符串定义减法。 + =并不是真正的附加,它是串联的。

+0

php处理字符串好很多 – streetparade 2009-11-17 19:57:43

1

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

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

+0

希望“递减“操作符将表现得像一个子字符串,并将之前附加的内容翻录。 – 2009-11-17 19:40:01

+0

在这个例子中,第二个提示会显示“测试” – 2009-11-17 19:41:13

+0

但即使有数字,减号也不是“递减”,即负号“ - ”。 Minus-equals' - ='只是一个便利操作符,它是一个与表达式'a = a - b'类似的复合操作符 – 2009-11-17 19:43:24

0

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

6

由于+运算符连接字符串,但-运算符只能相互减去数字。

至于为什么 - 可能是因为很难确定人们在从对方中扣除字符串时想做什么。

例如:

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

我应该这样做?

3

由于所有所说,-=运营商没有超载与弦乐的工作,它仅适用于数字。

如果您尝试使用字符串使用它,操作员将尝试在两个操作数转换为Number,这就是为什么你得到NaN,因为:

isNaN(+"foo"); // true 

为了摆脱对arr内容的您test字符串,你可以replace它:

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"