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


262

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

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

средства?



4
Та же проблема, но заголовок другой страницы не описывает общий случай, как это происходит
geotheory

1
Возможное дублирование того, что +…означает в JavaScript
Берги

Ответы:


312

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

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




Мне просто интересно, что является более эффективным, разобрать строку в целое число с помощью функции parseInt или с помощью оператора плюс?
Acarlstein

1
Чем он отличается от .parseInt()?
Даниэль В.

1
@acarlstein из ссылки MDN в ответе: «Хотя унарное отрицание (-) также может преобразовывать не числа, унарный плюс - это самый быстрый и предпочтительный способ преобразования чего-либо в число , потому что он не выполняет никаких других операций над числом «. (только для «официального» ответа)
AN

22

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


12

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

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

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

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


+dне будет оценивать число с первым примером вызова addMonths
Гас Кроуфорд

правда, я не знаю, что я сделал, когда написал это. +function(){...}выдаст NaNне оценивающую функцию
RubenLaguna

4
Не могли бы вы отредактировать свой ответ, чтобы удалить сумасшедшего? Это довольно запутанно.
Бух Бух
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.