¿Cómo es que puedo usar += en una cadena, pero no puedo usar -= en ella?

Por ejemplo...

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

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

test -= arr;
alert(test);  // Shows "NaN"
10
Josh Stodola 17 nov. 2009 a las 22:36

6 respuestas

La mejor respuesta

La respuesta corta es: no está definido para trabajar con cadenas.

Respuesta más larga: si prueba el operador de resta en dos cadenas, primero los convertirá en números y luego realizará la aritmética.

"10" - "2" = 8

Si intenta algo que no es numérico, obtiene un error relacionado con NaN:

"AA" - "A" = NaN
13
Goyuix 17 nov. 2009 a las 19:39

Porque el + (signo más) también es el operador de concatenación de cadenas, mientras que el - (signo menos) solo se aplica a la resta. Si JavaScript puede agregar 2 cadenas juntas, no se quejará, pero si intenta restar 2 cadenas, simplemente no tiene ningún sentido.

0
jaywon 17 nov. 2009 a las 19:39

En general, los lenguajes de programación no definen la resta para las cadenas. + = no es realmente una suma en primer lugar, es concatenación.

0
Ned Batchelder 17 nov. 2009 a las 19:38

Esto se debe a que el signo menos no es un operador de cadena válido, mientras que el signo más está sobrecargado para manejar tanto los números (operador de suma) como las cadenas (operador de concatenación).

¿Qué resultados esperabas obtener de esto?

1
Peter Bailey 17 nov. 2009 a las 19:38

Como todos decimos, el operador -= no está sobrecargado para trabajar con Strings, solo funciona con Numbers.

Si intenta usarlo con cadenas, el operador intentará convertir ambos operandos a Number, es por eso que obtiene NaN, porque:

isNaN(+"foo"); // true

Para deshacerse del contenido arr en su cadena test, puede reemplazar:

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"
3
CMS 17 nov. 2009 a las 20:20

Porque el operador + concatena cadenas, pero el operador - solo resta números entre sí.

En cuanto al por qué, probablemente porque es difícil determinar qué quieren hacer las personas cuando restan los hilos entre sí.

Por ejemplo:

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

¿Qué debería hacer esto?

6
Sean Vieira 17 nov. 2009 a las 19:39