Я считал следование вопроса на ТАК:
'7' + 4 дает '74', тогда как '7' - 4 дает 3 в JavaScript
Почему это происходит?
Оператор '+' определен как для строк, так и для чисел, поэтому когда вы применяете его к строке и числу, число будет преобразовано в строку, а затем строки будут конкатенированы: '7' + 4 => '7' + '4' => '74' Но '-' определен только для чисел, а не для строк, поэтому строка '7' будет преобразована в число: '7' - 4 => 7 - 4 => 3
Оператор +
перегружен в JavaScript для выполнения конкатенации и сложения. Способ, которым JavaScript определяет, какую операцию следует выполнить, основан на операндах. Если один из операндов не относится к классу Number
(или примитивному типу number
), то оба будут приведены к строкам для объединения.
3 + 3 = 6 3 + '3' = 33 '3' + 3 = 33 (new Object) + 3 = '[object Object]3'
Оператор -
, однако, предназначен только для чисел, и поэтому операнды всегда будут приводиться к числам во время операции.
+
- это оператор конкатенации строк, поэтому, когда вы выполняете '7' + 4
, вы переводите 4
в строку и добавляете ее. С оператором -
такой неоднозначности нет.
Если вы хотите однозначно использовать parseInt ()
или parseFloat ()
:
parseInt('7', 10) + 4
Зачем указывать систему счисления 10? Таким образом, '077'
не обрабатывается как восьмеричное.
Поскольку + для концентрации, если вы хотите сложить два числа, вы должны сначала проанализировать их parseInt (), а знак - для вычитания
Знак + в Javascript интерпретируется сначала как конкатенация, а затем как добавление, поскольку первая часть является строкой ('7'). Таким образом, интерпретатор преобразует вторую часть ( 4
) в строку и объединяет ее.
Что касается '7' - 4
, нет другого значения, кроме вычитания, поэтому вычитание выполняется.