Cosa significa = + _ significa in JavaScript

Mi chiedevo cosa significasse l’operatore = + _ in JavaScript. Sembra che lavori.

Esempio:

hexbin.radius = function(_) { if (!arguments.length) return r; r = +_; dx = r * 2 * Math.sin(Math.PI / 3); dy = r * 1.5; return hexbin; }; 

 r = +_; 
  • + cerca di trasmettere qualunque cosa _ a un numero.
  • _ è solo un nome variabile (non un operatore), potrebbe essere a , foo ecc.

Esempio:

 +"1" 

cast “1” al puro numero 1.

 var _ = "1"; var r = +_; 

r ora è 1 , non "1" .

Inoltre, secondo la pagina MDN su Operatori aritmetici :

L’operatore unario più precede il suo operando e valuta il suo operando, ma tenta di convertirlo in un numero, se non lo è già . […] Può convertire le rappresentazioni di stringa di interi e float, così come i valori non stringa true , false e null . Sono supportati i numeri interi decimali ed esadecimali ( "0x" -prefixed). I numeri negativi sono supportati (sebbene non per hex). Se non può analizzare un valore particolare, valuterà in NaN .

Si è anche notato che

Unary Plus è il modo più veloce e preferito di convertire qualcosa in un numero

Non è un operatore di assegnazione.

  • _ è solo un parametro passato alla funzione.

     hexbin.radius = function(_) { // ^ It is passed here // ... }; 
  • Nella riga successiva r = +_; + infront lancia quella variabile ( _ ) a un numero o valore intero e la assegna alla variabile r

NON CONFUSIONE CON += operatore

=+ sono in realtà due operatori = è l’assegnazione e + e _ è il nome della variabile.

piace:

 i = + 5; or j = + i; or i = + _; 

I seguenti codici ti aiuteranno a mostrare l’uso di =+ per convertire una stringa in int .
esempio:

 y = +'5' x = y +5 alert(x); 

uscite 10

use: Quindi qui y è int 5 causa di =+
altrimenti:

 y = '5' x = y +5 alert(x); 

uscite 55

Dove come _ è una variabile.

 _ = + '5' x = _ + 5 alert(x) 

uscite 10

Inoltre, sarebbe interessante sapere che potresti anche ottenere la stessa cosa con ~ (se string è int string (float sarà round di int) )

 y = ~~'5' // notice used two time ~ x = y + 5 alert(x); 

esce anche 10

~ è bit a bit NOT: inverte i bit del proprio operando. Ho fatto due volte senza alcun cambiamento di magnitudine.

Non è =+ . In JavaScript, + significa cambiarlo in numero.

+'32' restituisce 32.

+'a' restituisce NaN.

Quindi è ansible utilizzare isNaN() per verificare se può essere modificato in numero.

È subdolo.

La cosa importante da capire è che il carattere di sottolineatura qui è in realtà un nome di variabile , non un operatore.

Il segno più di fronte a ciò sta ottenendo il valore numerico positivo del carattere di sottolineatura, ovvero il casting efficace della variabile di sottolineatura come int. È ansible ottenere lo stesso effetto con parseInt() , ma il cast del segno più è probabilmente usato qui perché è più conciso.

E questo lascia appena il segno di uguale come un semplice assegnamento di variabile.

Probabilmente non è stato scritto deliberatamente per confondere, poiché un programmatore Javascript esperto generalmente riconoscerà il carattere di sottolineatura come variabile. Ma se non sai che è decisamente molto confuso. Io certamente non lo scriverei così; Non sono un fan dei nomi di variabili brevi e prive di significato al meglio delle volte – Se vuoi nomi di variabili brevi nel codice JS per risparmiare spazio, usa un minificatore; non scrivere con variabili corte per iniziare.

= + _ invierà _ in un numero.

Così

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

produrrebbe il numero

Suppongo tu voglia dire r = +_; ? In tal caso, è la conversione del parametro in un Number . Dire _ è ’12 .3 ‘, quindi +'12.3' restituisce 12.3 . Quindi nella dichiarazione citata +_ è assegnato a r .

_ è solo un nome di variabile, passato come parametro della funzione hexbin.radius e + lanciato in numero

Lascia che faccia un esempio simile alla tua funzione.

 var hexbin = {},r ; hexbin.radius = function(_) { if (!arguments.length) return r; console.log( _ , typeof _ ) r = +_; console.log( r , typeof r , isNaN(r) ); } 

ed esegui questa funzione di esempio .. che emette

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 

Assegna un nuovo valore alla variabile del lato sinistro un numero.

 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 

+_ è quasi equivalente a parseFloat(_) . Osservare che parseInt si fermerà a caratteri non numerici come il punto, mentre parshFloat no.

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 

Pochissime differenze:

  • La stringa vuota "" valutata a 0 , mentre parseInt () viene valutata in NaN
  • Per maggiori informazioni guarda qui: parseInt vs unary plus – quando usare quale

In questa espressione:

 r = +_; 
  • ‘+’ agisce qui come un operatore unario che tenta di convertire il valore dell’operando di destra. Non converte l’operando ma il valore valutato. Quindi _ rimarrà “1” se fosse così originario ma il r diventerà un numero puro.

Considera questi casi se vuoi applicare il + per la conversione numerica

 +"-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 

Però, è il convertitore numerico più veloce che consiglio a malapena a usarlo per sfruttarlo del tutto. parseInt/parseFloat sono buone alternative più leggibili.

In parole povere, +_ equivale all’uso del costruttore Number () .

In effetti, funziona anche sulle date:

 var d = new Date('03/27/2014'); console.log(Number(d)) // returns 1395903600000 console.log(+d) // returns 1395903600000 

DEMO: http://jsfiddle.net/dirtyd77/GCLjd/


Ulteriori informazioni possono essere trovate anche su MDN – Unary plus (+) section :

L’operatore unario più precede il suo operando e valuta il suo operando, ma tenta di convertirlo in un numero, se non lo è già. Anche se la negazione unaria (-) può anche convertire non numeri, unario è il modo più veloce e preferito di convertire qualcosa in un numero, perché non esegue altre operazioni sul numero. È in grado di convertire rappresentazioni di stringa di numeri interi e float, oltre ai valori non stringa true, false e null. Sono supportati i numeri interi decimali ed esadecimali (“0x” -prefixed). I numeri negativi sono supportati (sebbene non per hex). Se non può analizzare un valore particolare, valuterà in NaN.