Что означает + a + + b в JavaScript? - PullRequest
       6

Что означает + a + + b в JavaScript?

0 голосов
/ 02 сентября 2018

Был ответ на проблему вложенного массива при переполнении стека, которая включала оператор возврата + a + + b. (без периода) Что это? Что оно делает? Кажется, добавляет, но я не уверен, как это происходит. Чем он отличается от + b? Код ниже, и он работает:

var array= [1, 2, [3, 4], [], [5]];
var sum = array.toString().split(",").reduce(function(a, b) { return +a + +b; 
});

console.log(sum);

Ответы [ 5 ]

0 голосов
/ 02 сентября 2018

Унарный оператор + используется для явного приведения в JavaScript.

Несмотря на то, что некоторые разработчики смотрят на это свысока, сказать, что var num = 3 + +c; довольно уродливо, особенно для людей, которые не знают о возможном принуждении, потенциально даже «похожий на ошибку» фрагмент кода.

Наиболее распространенным практическим использованием унарного оператора +, вероятно, является получение метки времени даты

var timestamp = +new Date(); // this works!

Возможно, хорошей деталью памятника является унарный оператор -, который, по какой-то причине, нашему человеческому мозгу кажется гораздо счастливее интерпретировать. В основном, если мы видим var x = -c;, мы предполагаем, что компилятор:

  1. Пытается произвести приведение значения к числу c
  2. Если он может вернуть число, переверните знак и верните отрицательное число (-)

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

0 голосов
/ 02 сентября 2018

JavaScript динамически типизирован, но не имеет встроенных операторов для приведения значения, чтобы гарантировать, что это правильный тип для операции. Следовательно, различные приемы используются, когда важно, чтобы значение рассматривалось как число или строка и т. Д.

В этом случае используемый оператор - это «унарный +», который является естественным аналогом «унарного -», который используется для записи отрицательного числа: так же, как «-x» означает «0 - x» «+ x» означает «0 + x». На число это не влияет, но другие значения будут преобразованы в число.

Это важно, потому что оператор «двоичный +» делает разные вещи в зависимости от типа его операндов: если бы a была строкой, a + b означало бы «сложить две строки вместе», а не «сложить два числа».

Учитывая мнимую функцию cast_to_number, уравнение может быть более легко написано как return cast_to_number(a) + cast_to_number(b).

0 голосов
/ 02 сентября 2018

javascript имеет унарный оператор + и -, оба преобразуют операнд в числовой тип, но оператор - отрицает результат.

например:

> -'20'
-20
> +'500' + +'600'
1100
0 голосов
/ 02 сентября 2018

+ перед переменной является унарным оператором +. Вы, вероятно, знакомы с одинарным -, например -x.

И +x, и -x преобразуют x в число, но -x также меняет его знак. Это не основная цель существования унарного +, но это хороший побочный эффект.

Следовательно, разница между a + b и +a + +b будет видна из этого примера:

x = '9';          // '9'
x = +'9';         // 9
x = '9' + '9';    // '99'
x = +'9' + +'9';  // 18
0 голосов
/ 02 сентября 2018

Если предположить, что a или b были типа String, добавление оператора + перед ним приведет к его числу.

Это гарантирует, что ’1’ + ‘1’ будет 2 (добавление number с), а не 11 (объединение string с).

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