Какова цель символа плюс перед переменной?

262

это действительно звучит как простой вопрос, но мне не повезло в поисках. что +dв

function addMonths(d, n, keepTime) { 
    if (+d) {

средства?

Гох
источник
Возможный дубликат того, что делает знак плюс в «возврат + новая дата»
nawfal
4
Та же проблема, но заголовок другой страницы не описывает общий случай, как это происходит
geotheory
1
Возможное дублирование того, что +…означает в JavaScript
Берги

Ответы:

312

+Оператор возвращает числовое представление объекта. Таким образом, в вашем конкретном случае, это, казалось бы, предопределяет, является ли dненулевое число или нет .

Ссылка здесь . И, как указано в комментариях, здесь .

Пол Сонье
источник
8
Документы: developer.mozilla.org/en/JavaScript/Reference/Operators/…
Феликс Клинг
1
Рабочая ссылка: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ilker Cat
Мне просто интересно, что является более эффективным, разобрать строку в целое число с помощью функции parseInt или с помощью оператора плюс?
Acarlstein
1
Чем он отличается от .parseInt()?
Даниэль В.
1
@acarlstein из ссылки MDN в ответе: «Хотя унарное отрицание (-) также может преобразовывать не числа, унарный плюс - это самый быстрый и предпочтительный способ преобразования чего-либо в число , потому что он не выполняет никаких других операций над числом «. (только для «официального» ответа)
AN
22

Это унарный оператор «+», который выдает числовое выражение. Это было бы так же, как d*1я считаю.

naivists
источник
12

Как объяснено в других ответах, он преобразует переменную в число. Особенно полезно, когда d может быть числом или строкой функция что оценивается в число.

Пример (используя addMonthsфункцию в вопросе):

addMonths(34,1,true);
addMonths("34",1,true);

тогда +dво всех случаях будет оцениваться число. Таким образом, избегая необходимости проверять тип и использовать различные пути кода в зависимости от того, dявляется ли число, функция или строка, которые могут быть преобразованы в число.

RubenLaguna
источник
+dне будет оценивать число с первым примером вызова addMonths
Гас Кроуфорд
правда, я не знаю, что я сделал, когда написал это. +function(){...}выдаст NaNне оценивающую функцию
RubenLaguna
4
Не могли бы вы отредактировать свой ответ, чтобы удалить сумасшедшего? Это довольно запутанно.
Бух Бух