Operadores de asignación de cadenas de Javascript

¿Cómo 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" 

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

Respuesta más larga: si testing el operador de resta en dos cadenas, primero las convertirá en numbers y luego realizará la aritmética.

 "10" - "2" = 8 

Si intenta algo que no sea numérico, obtendrá un error relacionado con NaN:

 "AA" - "A" = NaN 

Porque el operador + concatena cadenas, pero el operador - solo resta numbers el uno del otro.

En cuanto al por qué, probablemente porque es difícil determinar lo que la gente quiere hacer cuando se restan cadenas el uno del otro.

Por ejemplo:

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

¿Qué debería hacer esto?

Como se dijo, el operador -= no está sobrecargado para trabajar con cadenas, 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 del arr en su cadena de test , puede replacelo :

 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" 

Esto se debe a que el signo less no es un operador de Cadena válido, mientras que el signo más está sobrecargado para manejar ambos Números (operador de sum) y Cadenas (operador de concatenación).

¿Qué resultados espera get de esto?

En general, los lenguajes de progtwigción no definen la resta de cadenas. + = no es realmente una adición en primer lugar, es concatenación.

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

    Intereting Posts