Вычитание двух строк в Javascript и приведение типов

1

Почему Javascript выполняет приведение типов для оператора -, а не для +?

str = "2"
console.log(str+str)
console.log(typeof(str+str))
console.log(str-str)
console.log(typeof(str-str))
  • 1
    Когда вы в последний раз вычитали, умножали или делили строки? Как двигатель узнал бы, если вы имели в виду «2» + «2», чтобы быть 4 или «22»? Поскольку он не может догадаться, он всегда будет конкатенацией. Другие предназначены для числовых операций, поэтому он может сделать предположение и очистить код для вас.
Теги:

3 ответа

2
Лучший ответ

Потому что единственный тип данных, для которого - имеет смысл - это число. Оператор + имеет значение для строковых и числовых операндов.

В JavaScript в общем случае выражение типа x + y должно быть отложено до времени выполнения, чтобы выяснить, что оно должно означать. Это когда вступают в силу правила преобразования типов. Для - он знает, что операнды должны быть числами, поэтому во время выполнения требуется меньше работы.

  • 0
    Хорошо, спасибо, что имеет смысл
2

В случае строки + означает конкатенацию. а все остальные математические операторы работают так же, как и обычные математические операторы (поэтому для этих строк используется тип)

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

Ссылки для дальнейшего чтения: -

Вы не знаете JS

Принуждение объяснили

2

- оператор определяются только для числового вычитания

Ещё вопросы

Сообщество Overcoder
Наверх
Меню