web-dev-qa-db-fra.com

Que signifie = + _ en JavaScript?

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;
};
249
Dimitry
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 et null. 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

392
mpm

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

95
Starx

=+ 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.

54
Grijesh Chauhan

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.

16
Ovilia

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.

16
SDC

= + _ convertira _ en un nombre.

Alors

var _ = "1",
   r = +_;
console.log(typeof r)

serait le nombre de sortie.

12
Harsha Ivaturi

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.

9
KooiInc

_ 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
6
rab

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
5
Amrendra

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.

3
Dom

+_ 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:

3
Brian

Dans cette expression:

r = +_;
  • '+' agit ici comme un opérateur unaire qui tente de convertir la valeur de l'opérande de droite. Il ne convertit pas l'opérande mais la valeur évaluée. Alors _ 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.

2
Arman McHitarian