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