O que significa = + _ significa em JavaScript

Eu queria saber o que significa o operador = + _ em JavaScript. Parece que faz atribuições.

Exemplo:

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

 r = +_; 
  • + tenta converter o que quer que seja para um número.
  • _ é apenas um nome de variável (não um operador), pode ser a , foo etc.

Exemplo:

 +"1" 

casting “1” para o número 1 puro.

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

r é agora 1 , não "1" .

Além disso, de acordo com a página do MDN sobre operadores aritméticos :

O operador unary plus precede seu operando e avalia seu operando, mas tenta convertê-lo em um número, se já não estiver . […] Ele pode converter representações de strings de inteiros e flutuantes, assim como os valores não-string true , false e null . Inteiros nos formatos decimal e hexadecimal ( "0x" -prefixed) são suportados. Números negativos são suportados (embora não para hexadecimal). Se não puder analisar um valor específico, ele será avaliado para NaN .

Também é notado que

unary plus é a maneira mais rápida e preferida de converter algo em um número

Não é um operador de atribuição.

  • _ é apenas um parâmetro passado para a function.

     hexbin.radius = function(_) { // ^ It is passed here // ... }; 
  • Na próxima linha r = +_; + infront converte essa variável ( _ ) para um valor numérico ou inteiro e a atribui à variável r

NÃO confunda com o operador +=

=+ são na verdade dois operadores = é atribuição e + e _ é o nome da variável.

gostar:

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

Meus códigos a seguir ajudarão você a mostrar o uso de =+ para converter uma string em int .
exemplo:

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

saídas 10

use: Então aqui y é int 5 por causa de =+
de outra forma:

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

saídas 55

Onde como _ é uma variável.

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

saídas 10

Além disso, seria interessante saber que você também pode conseguir a mesma coisa com ~ (se string for string int (float será arredondado para int) )

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

também saídas 10

~ é bit a bit NOT: Inverte os bits de seu operando. Eu fiz duas vezes para nenhuma mudança de magnitude.

Não é =+ . Em JavaScript, + significa alterá-lo em número.

+'32' retorna 32.

+'a' retorna NaN.

Então você pode usar isNaN() para verificar se ele pode ser alterado em número.

É um sorrateiro.

O importante é entender que o caractere de sublinhado aqui é, na verdade, um nome de variável , não um operador.

O sinal de mais na frente disso está recebendo o valor numérico positivo de sublinhado – ou seja, efetivamente convertendo a variável de sublinhado em um int. Você pode conseguir o mesmo efeito com parseInt() , mas a conversão de sinal de mais provavelmente é usada aqui porque é mais concisa.

E isso apenas deixa o sinal de igual como apenas uma atribuição de variável padrão.

Provavelmente não é deliberadamente escrito para confundir, já que um programador experiente em Javascript geralmente reconhecerá o sublinhado como uma variável. Mas se você não sabe que é definitivamente muito confuso. Eu certamente não escreveria assim; Eu não sou um fã de nomes curtos de variables ​​sem sentido no melhor dos tempos – Se você quiser nomes de variables ​​curtas no código JS para economizar espaço, use um minifier; não escreva com variables ​​curtas para começar.

= + _ lançará _ em um número.

assim

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

seria o número de saída.

Eu suponho que você quer dizer r = +_; ? Nesse caso, é a conversão do parâmetro para um Number . Diga _ é ’12 .3 ‘, depois +'12.3' retorna 12.3 . Então, na declaração citada, +_ é atribuído a r .

_ é apenas um nome de variável, passado como parâmetro da function hexbin.radius e + convertido em número

Deixe-me fazer uma exmple igual a sua function.

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

e execute esta function de exemplo .. quais saídas

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 

Vai atribuir um novo valor ao lado esquerdo variável um número.

 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 

+_ é quase equivalente a parseFloat(_) . Observe que parseInt irá parar em um caractere não numérico como ponto, enquanto parshFloat não.

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 

Muito poucas diferenças:

  • A cadeia vazia "" avaliada como 0 , enquanto parseInt () é avaliada como NaN
  • Para mais informações, veja aqui: parseInt vs unary plus – quando usar qual

Nesta expressão:

 r = +_; 
  • ‘+’ atua aqui como um operador unário que tenta converter o valor do operando direito. Não converte o operando, mas o valor avaliado. Então _ permanecerá “1” se fosse originalmente, mas o r se tornará um número puro.

Considere estes casos se alguém quer aplicar o + para conversão numérica

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

No entanto, é o conversor numérico mais veloz que eu dificilmente recomendaria um para usá-lo em excesso se fizer uso de todo. parseInt/parseFloat são boas alternativas mais legíveis.

Simplificando, +_ é equivalente a usar o construtor Number () .

Na verdade, até funciona em datas:

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

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


Mais informações também podem ser encontradas na seção MDN – Unary plus (+) :

O operador unary plus precede seu operando e avalia seu operando, mas tenta convertê-lo em um número, se já não estiver. Embora a negação unária (-) também possa converter não-números, unary plus é a maneira mais rápida e preferida de converter algo em um número, porque não executa nenhuma outra operação no número. Ele pode converter representações de strings de inteiros e flutuantes, bem como os valores não-string true, false e null. Inteiros nos formatos decimal e hexadecimal (“0x” -prefixed) são suportados. Números negativos são suportados (embora não para hexadecimal). Se não puder analisar um valor específico, ele será avaliado para NaN.