Jaki jest cel znaku plus przed zmienną?

262

to naprawdę brzmi jak proste pytanie, ale nie miałem szczęścia szukać. co robi +dw

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

znaczy?

goh
źródło
możliwy duplikat tego, co robi znak plus w 'return + new Date'
nawfal
3
Ten sam problem, ale tytuł innej strony nie opisuje ogólnego przypadku, jak to ma miejsce
geotheory
1
możliwy duplikat Co to +…znaczy w JavaScript
Bergi

Odpowiedzi:

312

+Operator przywraca Liczbowa obiektu. Tak więc w twoim konkretnym przypadku wydaje się, że przewidujesz, czy djest liczbą niezerową, czy nie .

Odnośnik tutaj . I, jak zauważył w komentarzach, tutaj .

Paul Sonier
źródło
Zastanawiam się tylko, która jest bardziej wydajna, parsuje ciąg znaków na liczbę całkowitą za pomocą funkcji parseInt lub operatora plus?
acarlstein
1
Czym się różni .parseInt()?
Daniel W.
1
@acarlstein z linku MDN w odpowiedzi: „Chociaż jednoargumentowe negowanie (-) może również konwertować liczby nieparzyste , jednoargumentowy plus jest najszybszym i preferowanym sposobem konwersji czegoś na liczbę , ponieważ nie wykonuje żadnych innych operacji na liczbie . ” (tylko dla „oficjalnej” odpowiedzi)
AN
22

Jest to jednoargumentowy operator „+”, który daje wyrażenie liczbowe. d*1Myślę, że byłoby to tak samo jak .

naiwiści
źródło
12

Jak wyjaśniono w innych odpowiedziach, konwertuje zmienną na liczbę. Szczególnie przydatne, gdy d może być liczbą lub łańcuchem funkcjonować która ocenia na liczbę.

Przykład (użycie addMonthsfunkcji w pytaniu):

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

następnie +doceni we wszystkich przypadkach. W ten sposób unikamy konieczności sprawdzania typu i wybierania różnych ścieżek kodu w zależności od tego, czy djest liczbą, funkcją czy łańcuchem, który można przekonwertować na liczbę.

RubenLaguna
źródło
+dnie oceni na liczbę z pierwszym przykładem wywołania addMonths
Gus Crawford
prawda, nie wiem co zrobiłem, kiedy to napisałem. +function(){...}wygeneruje funkcję NaNnie oceniającą
RubenLaguna
4
Czy możesz edytować swoją odpowiedź, aby usunąć wariata? To dość mylące.
Buh Buh,