Почему мой вывод отображает семь «1» подряд, а не добавляет их вместе равным 7? [Дубликат]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)

17
задан RightSaidFred 4 December 2011 в 20:12
поделиться

7 ответов

Одна или обе переменные являются строкой вместо числа. Это делает + выполнение конкатенации строки.

'2' + 2 === '22';  // true

2 + 2 === 4;  // true

Другие арифметические операторы / * - будут выполнять преобразование toNumber в строке (строках).

'3' * '5' === 15;  // true

Быстрый способ преобразования строки в число - использовать унарный оператор +.

+'2' + 2 === 4;  // true

... или с вашими переменными:

+x + +y
40
ответ дан RightSaidFred 23 August 2018 в 20:04
поделиться

это работает каждый раз

((x*1) + (y*1))
1
ответ дан chrisrth 23 August 2018 в 20:04
поделиться

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

3
ответ дан danwellman 23 August 2018 в 20:04
поделиться

Оператор сложения работает следующим образом: 1) Если хотя бы один операнд является строкой, другой преобразуется в строку и выполняется конкатенация

1 + "2"        // "12"
"2" + "3"      // "23"
"2" + null     // "2null", null is converted to "null"

2) В других случаях оба операнда преобразуются в числа:

1 + null      // 2, null is converted to 0
1 + undefined // NaN, undefined is converted to NaN

Для получения дополнительной информации см. сообщение оператора сложения JavaScript для демистификации .

0
ответ дан Dmitri Pavlutin 23 August 2018 в 20:04
поделиться

Унарный плюс должен работать:

var totalVal = (+2) + (+2);

alert(totalVal);
// result 4
0
ответ дан hsz 23 August 2018 в 20:04
поделиться

+ имеет два применения. Одним из них является добавление, другое - конкатенация строк. Если одна или обе ваши переменные являются строкой, то + объединяет их.

Вам нужно будет использовать parseInt или parseFloat, чтобы превратить строку в число.

5
ответ дан James Montagne 23 August 2018 в 20:04
поделиться

Если числа, которые вы пытаетесь добавить, равны 10 и 12, если их итоговая сумма должна быть 22, то вы должны, вероятно, сделать это как

+10 + +12

. И результатом может быть строка типа 1012, если одно или оба числа являются строкой.

1
ответ дан Siddhu 23 August 2018 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: