Zastanawiałem się, co oznacza operator = + _ w JavaScript. Wygląda na to, że wykonuje zadania.
Przykład:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
javascript
operators
Dimitry
źródło
źródło
-->
x= +_+ 0;
Odpowiedzi:
+
próbuje rzucić cokolwiek_
na liczbę._
jest tylko nazwa zmiennej (nie operator), to może byća
,foo
itd.Przykład:
rzuć „1” na czysty numer 1.
r
jest teraz1
nie"1"
.Ponadto, zgodnie ze stroną MDN na temat operatorów arytmetycznych :
Należy również zauważyć, że
źródło
+_
naprawdę oznacza0+_
, w którym przypadku_
należy rzutować przed dodaniem do 0?+'12' === 12
(wynik jest liczbą), ale0 + '12' === '012'
(wynik jest łańcuchem). Zauważ jednak, że0 - '12' === -12
.To nie jest operator przypisania.
_
jest tylko parametrem przekazanym do funkcji.W następnym wierszu
r = +_;
+
infront rzutuje tę zmienną (_
) na wartość liczbową lub całkowitą i przypisuje ją do zmiennejr
NIE WOLNO MÓWIĆ GO z
+=
operatoremźródło
=+
są rzeczywiście dwa operatory=
jest przypisanie a+
i_
jest nazwa zmiennej.lubić:
Moje poniższe kody pomogą ci pokazać użycie
=+
do konwersji ciągu na int .przykład:
wyjścia 10
use: Więc tutaj
y
jest int z5
powodu=+
inaczej:
wyjścia 55
Gdzie as
_
jest zmienną.wyjścia 10
Dodatkowo, byłoby interesujące wiedzieć, że możesz również osiągnąć to samo
~
(jeśli string jest int string (float będzie zaokrąglony do int) )również wyjścia 10
~
jest bitowe NIE: Odwraca bity swojego operandu. Zrobiłem dwa razy bez zmiany wielkości.źródło
x|0
do konwersji podwójnej na int; jednak to, podobnie jak użycie „~”, ma karę ograniczenia do liczb <2 ^ 32. + „2e15” nie.x|0
jest jeszcze szybszy+
. Prawidłowa ? niezła technika :). (2) Używam~
tylko, aby pokazać OP, że+
nie tylko znak może być użyty ( ja sam używam+
).|
dużo szybciej.To nie jest
=+
. W JavaScript+
oznacza zmianę na liczbę.+'32'
zwraca 32.+'a'
zwraca NaN.Możesz więc użyć,
isNaN()
aby sprawdzić, czy można go zmienić na liczbę.źródło
Jest podstępny.
Ważne jest, aby zrozumieć, że znak podkreślenia jest w rzeczywistości nazwą zmiennej , a nie operatorem.
Znakiem dodatkowym przed tym jest uzyskanie dodatniej wartości liczbowej podkreślenia - tj. Efektywne rzutowanie zmiennej podkreślenia na liczbę całkowitą. Możesz osiągnąć ten sam efekt
parseInt()
, ale prawdopodobnie używasz tutaj znaku plus, ponieważ jest bardziej zwięzły.To pozostawia znak równości jako zwykłe przypisanie zmiennej.
Prawdopodobnie nie jest on celowo wprowadzany w błąd, ponieważ doświadczony programista Javascript rozpoznaje podkreślenie jako zmienną. Ale jeśli nie wiesz, że jest to zdecydowanie bardzo mylące. Z pewnością nie napisałbym tego w ten sposób; W najlepszym wypadku nie jestem fanem krótkich, pozbawionych znaczenia nazw zmiennych - jeśli chcesz, aby krótkie nazwy zmiennych w kodzie JS oszczędzały miejsce, użyj minizera; nie pisz tego krótkimi zmiennymi na początek.
źródło
_
jest to zmienna.= + _ rzuci _ na liczbę.
Więc
wypisze liczbę.
źródło
Chyba masz na myśli
r = +_;
? W takim przypadku jest to konwersja parametru na aNumber
. Powiedz „_
12,3”, a następnie+'12.3'
powróci12.3
. Tak więc w cytowanym zestawieniu+_
przypisanor
.źródło
_
to po prostu nazwa zmiennej, przekazywana jako parametr funkcjihexbin.radius
i+
wylewana na liczbęPozwól mi zrobić przykład taki sam jak twoja funkcja.
i uruchom tę przykładową funkcję ... która wyprowadza
hexbin.radius („1”);
hexbin.radius (1);
hexbin.radius ([]);
hexbin.radius („a”);
hexbin.radius ({});
hexbin.radius (true);
źródło
Przydzieli nową wartość zmiennej po lewej stronie liczbę.
źródło
+
wcześniejb
.+_
jest prawie równoważne zparseFloat(_)
. Zauważ, żeparseInt
zatrzyma się na znakach nienumerycznych, takich jak kropka, podczas gdyparshFloat
nie.Termin ważności:
Exp:
Bardzo niewiele różnic:
""
wartość a0
, a parseInt () zwraca wartośćNaN
źródło
parseInr(_)
zamiastparseFloat(_)
?float
, ponieważ parseInt zatrzyma się na znakach nienumerycznych, parshFloat nie. EXP:parseFloat(2.4) = 2.4
vsparseInt(2.4) = 2
.Mówiąc najprościej,
+_
jest równoważne z użyciem konstruktora Number () .W rzeczywistości działa nawet w terminach:
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
Więcej informacji można również znaleźć w sekcji MDN - Unary plus (+) :
źródło
W tym wyrażeniu:
_
Pozostanie więc „1”, jeśli tak było pierwotnie, aler
stanie się czystą liczbą.Rozważ te przypadki, czy chcesz zastosować znak + do konwersji numerycznej
Chociaż jest to najszybszy konwerter numeryczny, raczej nie polecam go nadużywać, jeśli w ogóle z niego skorzystasz.
parseInt/parseFloat
są dobrymi, bardziej czytelnymi alternatywami.źródło