Сложение и вычитание чисел как строк - PullRequest
27 голосов
/ 07 июня 2010

Я прочитал следующее по вопросу о SO:

'7' + 4 дает '74', тогда как '7' - 4 дает 3 в JavaScript

Почему это происходит?

Ответы [ 5 ]

30 голосов
/ 07 июня 2010

+ является оператором конкатенации строк, поэтому, когда вы делаете '7' + 4, вы вводите 4 в строку и добавляете ее. С оператором - такой двусмысленности нет.

Если вы хотите быть однозначным, используйте parseInt() или parseFloat():

parseInt('7', 10) + 4

Зачем указывать основание до 10? Так что '077' не анализируется как восьмеричное.

24 голосов
/ 07 июня 2010

Оператор '+' определен как для строк, так и для чисел, поэтому при применении его к строке и числу число будет преобразовано в строку, а затем строки будут объединены: '7' + 4 => '7' + '4' => '74' Но '-' определено только для чисел, а не для строк, поэтому строка '7' будет преобразована в число: «7» - 4 => 7 - 4 => 3

16 голосов
/ 07 июня 2010

Оператор + перегружен в JavaScript для выполнения конкатенации и сложения. То, как JavaScript определяет, какую операцию выполнять, основано на операндах. Если один из операндов не относится к классу Number (или к примитиву number), то оба будут преобразованы в строки для объединения.

3 + 3 = 6
3 + '3' = 33
'3' + 3 = 33
(new Object) + 3 = '[object Object]3'

Оператор -, однако, предназначен только для чисел, и поэтому операнды всегда будут приводиться к числам во время операции.

2 голосов
/ 07 июня 2010

Знак + в Javascript интерпретируется как конкатенация сначала, а затем как дополнение, потому что первая часть является строкой ('7').Таким образом, интерпретатор преобразует 2-ю часть (4) в строку и объединяет ее.

Что касается '7' - 4, другого значения, кроме вычитания, нет, поэтому вычитание выполняется.

2 голосов
/ 07 июня 2010

Поскольку + для концентрации, если вы хотите добавить два числа, вы должны сначала проанализировать их parseInt () и - знак для вычитания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...