Je me demandais ce que signifie l'opérateur = + _ en JavaScript. On dirait qu'il fait des devoirs.
Exemple:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
r = +_;
+
Essaie de convertir tout ce que _
Correspond à un nombre._
N'est qu'un nom de variable (pas un opérateur), il pourrait s'agir de a
, foo
etc.Exemple:
+"1"
couler "1" au nombre pur 1.
var _ = "1";
var r = +_;
r
est maintenant 1
, pas "1"
.
De plus, selon le page MDN sur les opérateurs arithmétiques :
L'opérateur unaire plus précède son opérande et est évalué en son opérande mais tente de le convertir en nombre, s'il ne l'est pas déjà . [...] Il peut convertir les représentations sous forme de chaîne d'entiers et de flottants, ainsi que les valeurs autres que de chaîne
true
,false
etnull
. Les entiers aux formats décimal et hexadécimal (avec le préfixe"0x"
) Sont pris en charge. Les nombres négatifs sont pris en charge (mais pas pour l'hex). S'il ne peut pas analyser une valeur particulière, il sera évalué àNaN
.
Il est également noté que
plus unaire est le moyen le plus rapide et préféré de convertir quelque chose en un nombre
Ce n'est pas un opérateur d'affectation.
_
n'est qu'un paramètre transmis à la fonction.
hexbin.radius = function(_) {
// ^ It is passed here
// ...
};
Sur la ligne suivante r = +_;
+
infront lance cette variable (_
) en un nombre ou une valeur entière et l'assigne à la variable r
NE PAS LE CONFONDER AVEC +=
opérateur
=+
sont en réalité deux opérateurs =
est une affectation et +
et _
est le nom de la variable.
comme:
i = + 5;
or
j = + i;
or
i = + _;
Mes codes suivants vous aideront à montrer l'utilisation de =+
pour convertir une chaîne en int .
exemple:
y = +'5'
x = y +5
alert(x);
sorties 1
se: Donc ici y
est int 5
en raison de =+
sinon:
y = '5'
x = y +5
alert(x);
sorties 55
Tandis que _
est une variable.
_ = + '5'
x = _ + 5
alert(x)
sorties 1
En outre, Il serait intéressant de savoir que vous pouvez également obtenir la même chose avec ~
(si la chaîne est ) int chaîne (float sera arrondi à int) )
y = ~~'5' // notice used two time ~
x = y + 5
alert(x);
affiche également 1
~
est au niveau du bit NOT: inverse les bits de son opérande. Je l'ai fait deux fois sans changement de magnitude.
Ce n'est pas =+
. En JavaScript, +
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.
C'est un 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 en face de celui-ci devient la valeur numérique positive du trait de soulignement - c'est-à-dire que la variable de soulignement est effectivement transformée en entier. Vous pouvez obtenir le même effet avec parseInt()
, mais la conversion du signe plus est probablement utilisée ici car elle est plus concise.
Et cela ne laisse que le signe égal comme une simple 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 que c'est vraiment très déroutant. Je ne l'écrirais certainement pas comme ça; Dans le meilleur des cas, je ne suis pas un fan des noms de variable courts et sans signification. Si vous voulez des noms de variable abrégés dans le code JS pour économiser de l'espace, utilisez un minifier; ne l'écrivez pas avec des variables courtes pour commencer.
= + _ convertira _ en un nombre.
Alors
var _ = "1",
r = +_;
console.log(typeof r)
serait le nombre de sortie.
Je suppose que vous voulez dire r = +_;
? Dans ce cas, il s’agit de la conversion du paramètre en Number
. Dire _
est '12 .3 ', puis +'12.3'
résultats 12.3
. Donc, dans la déclaration citée +_
est affecté à r
.
_
est juste un nom de variable, passé en paramètre de la fonction hexbin.radius
, et +
le jette en nombre
Permettez-moi de faire un exemple identique à votre fonction.
var hexbin = {},r ;
hexbin.radius = function(_) {
if (!arguments.length)
return r;
console.log( _ , typeof _ )
r = +_;
console.log( r , typeof r , isNaN(r) );
}
et lancez cet exemple de fonction .. quelles sorties
hexbin.radius ("1");
1 string
1 number false
hexbin.radius (1);
1 number
1 number false
hexbin.radius ([]);
[] object
0 number false
hexbin.radius ('a');
a string
NaN number true
hexbin.radius ({});
Object {} object
NaN number true
hexbin.radius (true);
true boolean
1 number false
Il va affecter un nouveau numéro à la variable de gauche.
var a=10;
var b="asg";
var c=+a;//return 10
var d=-a;//return -10
var f="10";
var e=+b;
var g=-f;
console.log(e);//NAN
console.log(g);//-10
Tout simplement, +_
est équivalent à l’utilisation du constructeur Number () .
En fait, ça marche même sur les dates:
var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
Plus d'informations peuvent également être trouvées sur MDN - section Unary plus (+) :
L'opérateur unaire plus précède son opérande et en évalue l'opérande, mais tente de le convertir en nombre, s'il ne l'est pas déjà. Bien que la négation unaire (-) puisse également convertir des non-nombres, unary plus est le moyen le plus rapide et préféré de convertir quelque chose en nombre car elle n'effectue aucune autre opération sur le nombre. Il peut convertir les représentations sous forme de chaînes d'entiers et de flottants, ainsi que les valeurs non-chaînes true, false et null. Les entiers aux formats décimal et hexadécimal (au format "0x") sont pris en charge. Les nombres négatifs sont pris en charge (mais pas pour l'hex). S'il ne peut pas analyser une valeur particulière, il sera évalué à NaN.
+_
Est presque équivalent de parseFloat(_)
. Observez que parseInt
s'arrêtera à un caractère non numérique tel que point, alors que parshFloat
ne le sera pas.
EXP:
parseFloat(2.4) = 2.4
vs
parseInt(2.4) = 2
vs
+"2.4" = 2.4
Exp:
var _ = "3";
_ = +_;
console.log(_); // will show an integer 3
Très peu de différences:
""
Est évaluée à 0
, Tandis que parseInt () est évaluée à NaN
Dans cette expression:
r = +_;
_
restera "1" s'il en était ainsi à l'origine mais le r
deviendra un nombre pur.Considérez ces cas si on veut appliquer le + pour la conversion numérique
+"-0" // 0, not -0
+"1" //1
+"-1" // -1
+"" // 0, in JS "" is converted to 0
+null // 0, in JS null is converted to 0
+undefined // NaN
+"yack!" // NaN
+"NaN" //NaN
+"3.14" // 3.14
var _ = "1"; +_;_ // "1"
var _ = "1"; +_;!!_ //true
var _ = "0"; +_;!!_ //true
var _ = null; +_;!!_ //false
Bien que ce soit le convertisseur numérique le plus rapide, je recommanderais difficilement à quelqu'un de le surutiliser si vous l'utilisiez. parseInt/parseFloat
sont de bonnes alternatives plus lisibles.