Ich habe mich gefragt, was der Operator = + _ in JavaScript bedeutet. Es sieht so aus, als würde es Aufgaben erledigen.
Beispiel:
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
quelle
quelle
-->
x= +_+ 0;
Antworten:
+
versucht, alles, was_
ist, auf eine Zahl zu übertragen._
ist nur ein Variablenname (kein Operator), es könnte seina
,foo
etc.Beispiel:
Wirf "1" auf die reine Nummer 1.
r
ist jetzt1
nicht"1"
.Darüber hinaus laut der MDN-Seite über arithmetische Operatoren :
Es wird auch darauf hingewiesen, dass
quelle
+_
wirklich0+_
, in welchem Fall_
muss vor dem Hinzufügen zu 0 gewirkt werden?+'12' === 12
(Ergebnis ist eine Zahl), sondern0 + '12' === '012'
(Ergebnis ist eine Zeichenfolge). Beachten Sie jedoch, dass0 - '12' === -12
.Es ist kein Zuweisungsoperator.
_
ist nur ein Parameter, der an die Funktion übergeben wird.In der nächsten Zeile
r = +_;
+
infront wird diese Variable (_
) in eine Zahl oder einen ganzzahligen Wert umgewandelt und der Variablen zugewiesenr
Verwechseln Sie es nicht mit dem
+=
Bedienerquelle
=+
Sind eigentlich zwei Operatoren=
ist Zuweisung und+
und_
Variablenname.mögen:
Meine folgenden Codes helfen Ihnen dabei, die Verwendung von
=+
zum Konvertieren eines Strings in int zu zeigen .Beispiel:
Ausgänge 10
use: Also hier
y
ist int5
wegen=+
sonst:
Ausgänge 55
Wo wie
_
ist eine Variable.Ausgänge 10
Darüber hinaus wäre es interessant zu wissen, dass Sie dasselbe auch mit erreichen können
~
(wenn string int string ist (float ist eine Runde von int) ).gibt auch 10 aus
~
ist bitweise NICHT: Invertiert die Bits seines Operanden. Ich habe zweimal ohne Größenänderung gearbeitet.quelle
x|0
, um double in int umzuwandeln; Dies und die Verwendung von '~' haben jedoch die Strafe, sich auf Zahlen <2 ^ 32 zu beschränken. + "2e15" nicht.x|0
ist dann noch schneller+
. Richtig ? schöne Technik :). (2) Ich benutze~
nur, um OP zu zeigen, dass+
nicht nur ein Zeichen verwendet werden kann ( ich selbst benutze+
).|
viel schneller.Es ist nicht
=+
. In JavaScript+
bedeutet dies, dass Sie es in eine Zahl ändern.+'32'
gibt 32 zurück.+'a'
gibt NaN zurück.Sie können also verwenden
isNaN()
, um zu überprüfen, ob es in eine Nummer geändert werden kann.quelle
Es ist eine hinterhältige.
Es ist wichtig zu verstehen, dass der Unterstrich hier tatsächlich ein Variablenname und kein Operator ist.
Das Pluszeichen davor gibt den positiven numerischen Wert des Unterstrichs an - dh, die Unterstrichvariable wird effektiv in ein int umgewandelt. Sie könnten den gleichen Effekt mit erzielen
parseInt()
, aber das Pluszeichen wird hier wahrscheinlich verwendet, weil es prägnanter ist.Und damit bleibt das Gleichheitszeichen nur eine Standardvariablenzuweisung.
Es ist wahrscheinlich nicht absichtlich geschrieben, um zu verwirren, da ein erfahrener Javascript-Programmierer den Unterstrich im Allgemeinen als Variable erkennt. Aber wenn Sie nicht wissen, dass es definitiv sehr verwirrend ist. Ich würde es bestimmt nicht so schreiben; Ich bin im besten Fall kein Fan von kurzen, bedeutungslosen Variablennamen. Wenn Sie kurze Variablennamen in JS-Code verwenden möchten, um Platz zu sparen, verwenden Sie einen Minifier. Schreiben Sie es zunächst nicht mit kurzen Variablen.
quelle
_
es sich um eine Variable handelt.= + _ wird _ in eine Zahl umwandeln.
So
würde Nummer ausgeben.
quelle
Ich nehme an du meinst
r = +_;
? In diesem Fall wird der Parameter in a konvertiertNumber
. Sagen_
wir '12 .3 'und+'12.3'
kehren dann zurück12.3
. So wird in der zitierten Anweisung+_
zugeordnetr
.quelle
_
ist nur ein Variablenname, der als Funktionsparameter übergebenhexbin.radius
und+
in eine Zahl umgewandelt wirdLassen Sie mich ein Beispiel wie Ihre Funktion machen.
und führen Sie diese Beispielfunktion aus
hexbin.radius ("1");
hexbin.radius (1);
hexbin.radius ([]);
hexbin.radius ('a');
hexbin.radius ({});
hexbin.radius (wahr);
quelle
Es wird der linken Variablen eine neue Zahl zugewiesen.
quelle
+
vor dem vergessenb
.+_
ist fast gleichbedeutend mitparseFloat(_)
. Beachten Sie, dass diesparseInt
bei nicht numerischen Zeichen wie Punkt endetparshFloat
nicht der ist.EXP:
Exp:
Sehr wenige Unterschiede:
""
ausgewertet0
, während parseInt () zu a ausgewertet wirdNaN
quelle
parseInr(_)
anstattparseFloat(_)
?float
, da parseInt bei nicht numerischen Zeichen anhält, parshFloat jedoch nicht. EXP:parseFloat(2.4) = 2.4
vsparseInt(2.4) = 2
.Einfach ausgedrückt,
+_
entspricht der Verwendung des Number () -Konstruktors.In der Tat funktioniert es sogar an Daten:
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
Weitere Informationen finden Sie auch im Abschnitt MDN - Unary plus (+) :
quelle
In diesem Ausdruck:
_
bleibt "1", wenn es ursprünglich so war, aber dier
wird reine Zahl.Betrachten Sie diese Fälle, ob Sie das + für die numerische Konvertierung anwenden möchten
Obwohl es der schnellste numerische Konverter ist, würde ich kaum einen empfehlen, ihn zu überbeanspruchen, wenn überhaupt.
parseInt/parseFloat
sind gut lesbarere Alternativen.quelle