Python: функциональная, рекурсивная однострочная с использованием логической оценки короткого замыкания.
factorial = lambda n: ((n <= 1) and 1) or factorial(n-1) * n
Короткий ответ - он не предназначен для работы со строками.
Более длинный ответ: если вы попробуете оператор вычитания для двух строк, он сначала преобразует их в числа, а затем выполните арифметические операции.
"10" - "2" = 8
Если вы попробуете что-то нечисловое, вы получите ошибку, связанную с NaN:
"AA" - "A" = NaN
Потому что оператор +
объединяет строки, а оператор -
только вычитает числа друг из друга.
Что касается причины - вероятно, потому что трудно определить, что люди хотят делать, когда они вычитают строки друг из друга.
Например:
"My string is a very string-y string" - "string"
Что это должно делать?
Как уже говорилось, оператор - =
не перегружен для работы со строками, он работает только с числами.
Если вы попытаетесь использовать его со строками, оператор попытается преобразовать оба операнда в Число
, поэтому вы получаете NaN
, потому что:
isNaN(+"foo"); // true
Чтобы избавиться от содержимого arr
в строке test
, вы можете заменить это:
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"
Это потому, что знак минус не является допустимым оператором String, тогда как знак плюс перегружен для обработки как чисел (оператор сложения), так и строк (оператор конкатенации).
Какие результаты вы получили надеетесь получить от этого?
Обычно языки программирования не определяют вычитание для строк. + = на самом деле не сложение, это конкатенация.
Потому что + (знак плюс) также является оператором конкатенации строк, а знак - (минус) применяется только к вычитанию. Если JavaScript может складывать 2 строки вместе, он не будет жаловаться, но если вы попытаетесь вычесть 2 строки, это не имеет никакого смысла.