Je me demandais ce que l' opérateur = + _ signifie en JavaScript. On dirait qu'il fait des affectations.
Exemple:
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
la source
la source
-->
x= +_+ 0;
Réponses:
+
essaie de convertir tout ce qui_
est en nombre._
n'est qu'un nom de variable (pas un opérateur), ça pourrait l'êtrea
,foo
etc.Exemple:
transtypez "1" en nombre pur 1.
r
est maintenant1
, non"1"
.De plus, selon la page MDN sur les opérateurs arithmétiques :
Il est également noté que
la source
+_
vraiment0+_
, auquel cas_
doit être transtypé avant d'ajouter à 0?+'12' === 12
(le résultat est un nombre), mais0 + '12' === '012'
(le résultat est une chaîne). Notez cependant cela0 - '12' === -12
.Ce n'est pas un opérateur d'affectation.
_
est juste un paramètre passé à la fonction.Sur la ligne suivante
r = +_;
+
infront convertit cette variable (_
) en un nombre ou une valeur entière et l'affecte à la variabler
NE PAS LE CONFONDRE AVEC l'
+=
opérateurla source
=+
sont en fait deux opérateurs=
est l'affectation et+
et_
est un nom de variable.comme:
Mes codes suivants vous aideront à montrer l'utilisation de
=+
pour convertir une chaîne en int .exemple:
sorties 10
use: Voici
y
donc int à5
cause du=+
contraire:
sorties 55
Où as
_
est une variable.sorties 10
De plus, il serait intéressant de savoir que vous pourriez également obtenir la même chose avec
~
(si la chaîne est int chaîne (float sera arrondi à int) )produit également 10
~
est au niveau du bit NON: inverse les bits de son opérande. Je l'ai fait deux fois sans changement d'amplitude.la source
x|0
pour convertir double en int; cependant, ceci ainsi que l'utilisation de «~» a la pénalité de se limiter aux nombres <2 ^ 32. + "2e15" ne fonctionne pas.x|0
c'est encore plus rapide+
. Correct ? belle technique :). (2) J'utilise~
juste pour montrer à OP que+
non seulement un signe peut être utilisé ( j'utilise moi-même+
).|
beaucoup plus rapide.Ça ne l'est pas
=+
. En JavaScript, cela+
signifie le changer en nombre.+'32'
renvoie 32.+'a'
renvoie NaN.Vous pouvez donc utiliser
isNaN()
pour vérifier s'il peut être changé en nombre.la source
C'est sournois.
La chose importante à comprendre est que le caractère de soulignement ici est en fait un nom de variable , pas un opérateur.
Le signe plus devant cela obtient la valeur numérique positive du trait de soulignement - c'est-à-dire que la conversion effective de la variable de soulignement en un int. Vous pouvez obtenir le même effet avec
parseInt()
, mais le casting du signe plus est probablement utilisé ici car il est plus concis.Et cela laisse juste le signe égal comme juste une affectation de variable standard.
Ce n'est probablement pas délibérément écrit pour confondre, car un programmeur Javascript expérimenté reconnaîtra généralement le trait de soulignement comme une variable. Mais si vous ne savez pas, c'est vraiment très déroutant. Je ne l'écrirais certainement pas comme ça; Je ne suis pas un fan des noms de variables courts sans signification dans le meilleur des cas - Si vous voulez que les noms de variables courts en code JS économisent de l'espace, utilisez un minifieur; ne l'écrivez pas avec des variables courtes pour commencer.
la source
_
s'agit d'une variable.= + _ convertira _ en nombre.
Alors
donnerait un numéro.
la source
Je suppose que tu veux dire
r = +_;
? Dans ce cas, c'est la conversion du paramètre en aNumber
. Dites_
est «12,3», puis+'12.3'
revient12.3
. Ainsi, dans la déclaration citée+_
est affectée àr
.la source
_
est juste un nom de variable, passé en paramètre de la fonctionhexbin.radius
et+
converti en nombrePermettez-moi de faire un exemple similaire à votre fonction.
et exécutez cet exemple de fonction .. qui génère
hexbin.radius ("1");
hexbin.radius (1);
hexbin.radius ([]);
hexbin.radius («a»);
hexbin.radius ({});
hexbin.radius (vrai);
la source
Il attribuera une nouvelle valeur à la variable de gauche un nombre.
la source
+
avant leb
.+_
est presque équivalent deparseFloat(_)
. Observez queparseInt
cela s'arrêtera au caractère non numérique tel que le point, alors queparshFloat
non.EXP:
Exp:
Très peu de différences:
""
évaluée en a0
, tandis que parseInt () est évaluée enNaN
la source
parseInr(_)
place deparseFloat(_)
?float
, parce que parseInt s'arrêtera au caractère non numérique, pas parshFloat. EXP:parseFloat(2.4) = 2.4
vsparseInt(2.4) = 2
.Autrement dit,
+_
équivaut à utiliser le constructeur Number () .En fait, cela fonctionne même sur les dates:
DÉMO: http://jsfiddle.net/dirtyd77/GCLjd/
Vous trouverez également plus d'informations sur MDN - Unary plus (+) :
la source
Dans cette expression:
_
restera donc "1" s'il en était ainsi à l'origine, mais ler
nombre deviendra pur.Considérez ces cas si l'on veut appliquer le + pour la conversion numérique
Cependant, c'est le convertisseur numérique le plus rapide que je recommanderais à peine d'en abuser s'il est utilisé.
parseInt/parseFloat
sont de bonnes alternatives plus lisibles.la source