2009-11-17 123 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"