2009-11-17 20 views
8

Come mai è possibile utilizzare += su una stringa, ma non è possibile utilizzare -= su di esso?Operatori assegnazione stringa Javascript

Per esempio ...

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

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

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

Nota: io non sono un manichino; So che non puoi "sottrarre" una stringa. Qualcuno mi ha chiesto questo e non ero sicuro di come rispondere, quindi lo sto postando qui. –

+0

L'operatore '+' è l'operatore di concatenazione quando uno degli operandi è una stringa. – Gumbo

+1

Solo due operatori sono definiti per le stringhe: '+' e '+ =' (https://developer.mozilla.org/en/Core_Javascript_1.5_Reference#Operators) –

risposta

11

La risposta breve è: non è definito che funzioni con le stringhe.

Risposta più lunga: se si prova l'operatore di sottrazione su due stringhe, prima le trasmetterà ai numeri e quindi eseguirà l'aritmetica.

"10" - "2" = 8 

Se si cerca qualcosa che è non numerico, si ottiene un errore NaN correlati:

"AA" - "A" = NaN 
0

In generale, i linguaggi di programmazione non definiscono la sottrazione per le stringhe. + = non è davvero un'aggiunta in primo luogo, è la concatenazione.

+0

php è molto meglio per gestire le stringhe – streetparade

1

Questo perché il segno meno non è un operatore String valido, mentre il segno più è sovraccarico per gestire entrambi i numeri (operatore di addizione) e stringhe (operatore di concatenazione).

Quali risultati speravate di ottenere da questo?

+0

Sperando che il " decremento "l'operatore si comporterebbe come una sottostringa e strapperebbe ciò che prima era stato aggiunto. –

+0

Nell'esempio, il secondo avviso mostrerebbe "Test" –

+0

Ma anche con i numeri il segno meno non è "decremento", cioè meno-meno '--'. Minus-equals '- =' è solo un operatore di convenienza che è un operatore composto analogo all'espressione 'a = a - b' –

0

Poiché il segno + (segno più) è anche l'operatore di concatenazione di stringhe, mentre il segno - (segno meno) si applica solo alla sottrazione. Se JavaScript può aggiungere 2 stringhe insieme, non si lamenterà, ma se provi a sottrarre 2 stringhe, non ha alcun senso.

6

Poiché l'operatore + concatena le stringhe, ma l'operatore - sottrae solo numeri l'uno dall'altro.

Per quanto riguarda il perché - probabilmente perché è difficile determinare ciò che le persone vogliono fare quando sottraggono le corde l'una dall'altra.

Ad esempio:

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

Cosa dovrebbe fare questo?

3

Come tutti ha detto, l'operatore -= non è sovraccarico di lavorare con le stringhe, che funziona solo con Numeri.

Se si tenta di utilizzarlo con le stringhe, l'operatore tenterà di convertire entrambi gli operandi a Number, è per questo che hai trovato NaN, perché:

isNaN(+"foo"); // true 

per sbarazzarsi del contenuto arr sul tuo test stringa, è possibile che 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" 
Problemi correlati