Почему Javascript выполняет приведение типов для оператора -, а не для +?
str = "2"
console.log(str+str)
console.log(typeof(str+str))
console.log(str-str)
console.log(typeof(str-str))
Потому что единственный тип данных, для которого -
имеет смысл - это число. Оператор +
имеет значение для строковых и числовых операндов.
В JavaScript в общем случае выражение типа x + y
должно быть отложено до времени выполнения, чтобы выяснить, что оно должно означать. Это когда вступают в силу правила преобразования типов. Для -
он знает, что операнды должны быть числами, поэтому во время выполнения требуется меньше работы.
В случае строки +
означает конкатенацию. а все остальные математические операторы работают так же, как и обычные математические операторы (поэтому для этих строк используется тип)
let str = '2'
console.log( str + str )
console.log( str - str ) // 2 - 2 = 0
console.log( str * str ) // 2 * 2 = 4
console.log( str / str ) // 2 / 2 = 1
Ссылки для дальнейшего чтения: -
-
оператор определяются только для числового вычитания