Операторы присваивания строк Javascript - PullRequest
10 голосов
/ 17 ноября 2009

Почему я могу использовать += для строки, но я не могу использовать -= для нее?

Например ...

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

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

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

Ответы [ 6 ]

13 голосов
/ 17 ноября 2009

Краткий ответ - он не определен для работы со строками.

Более длинный ответ: если вы попробуете оператор вычитания для двух строк, он сначала приведёт их к числам, а затем выполнит арифметику.

"10" - "2" = 8

Если вы попробуете что-то не числовое, вы получите ошибку, связанную с NaN:

"AA" - "A" = NaN
6 голосов
/ 17 ноября 2009

Поскольку оператор + объединяет строки, но оператор - только вычитает числа друг от друга.

Что касается причины - вероятно, потому что трудно определить, что люди хотят делать, когда они вычитают строки друг из друга.

Например:

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

Что это должно делать?

3 голосов
/ 17 ноября 2009

Как уже говорилось, оператор -= не перегружен для работы со строками, он работает только с числами.

Если вы попытаетесь использовать его со строками, оператор попытается преобразовать оба операнда в Number, поэтому вы получаете NaN, потому что:

isNaN(+"foo"); // true

Чтобы избавиться от содержимого arr в строке test, вы можете заменить it:

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"
1 голос
/ 17 ноября 2009

Это потому, что знак минус не является допустимым оператором String, а знак плюс перегружен для обработки как чисел (оператор сложения), так и строк (оператор конкатенации).

Какие результаты вы надеялись получить от этого?

0 голосов
/ 17 ноября 2009

Поскольку + (знак плюс) также является оператором конкатенации строк, тогда как - (знак минус) применяется только к вычитанию. Если JavaScript может добавлять 2 строки вместе, он не будет жаловаться, но если вы попытаетесь вычесть 2 строки, это просто не имеет никакого смысла.

0 голосов
/ 17 ноября 2009

Как правило, языки программирования не определяют вычитание для строк. + = это на самом деле не сложение, а конкатенация.

...