Это кажется совершенно очевидным в своей логике (строка не может вычитать), но я хотел бы знать, как это решение принимается при выполнении JavaScript. Как точно применяются правила принуждения здесь?
Почему в JavaScript (принуждение) 1 + '1' = '11' и 1 - '1' = 0?
Ответ 1
- определяется в терминах ToNumber, тогда как + имеет дополнительное предложение для строк (акцент мой):
11.6.1 Оператор добавления (
+)Оператор сложения выполняет либо конкатенацию строк, либо числовую дополнение.
Производство
AdditiveExpression : AdditiveExpression + MultiplicativeExpressionоценивается следующим образом:
- Пусть
lrefбудет результатом оценкиAdditiveExpression.- Пусть
lvalbeGetValue(lref).- Пусть
rrefявляется результатом оценкиMultiplicativeExpression.- Пусть
rvalbeGetValue(rref).- Пусть
lprimbeToPrimitive(lval).- Пусть
rprimbeToPrimitive(rval).- Если
Type(lprim)-StringилиType(rprim)-String, тогда- Вернуть строку, которая является результатом объединения
ToString(lprim), за которым следуетToString(rprim)[...]