Me preguntaba qué significa el operador = + _ en JavaScript. Parece que hace tareas.
Ejemplo:
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
fuente
fuente
-->
x= +_+ 0;
Respuestas:
+
intenta lanzar lo que_
sea a un número._
es solo un nombre de variable (no un operador), podría sera
,foo
etc.Ejemplo:
lanzar "1" al número puro 1.
r
es ahora1
no"1"
.Además, según la página MDN sobre operadores aritméticos :
También se observa que
fuente
+_
realmente significa0+_
, en cuyo caso_
debe lanzarse antes de sumar a 0?+'12' === 12
(el resultado es un número), sino0 + '12' === '012'
(el resultado es una cadena). Tenga en cuenta, sin embargo, que0 - '12' === -12
.No es un operador de asignación.
_
es solo un parámetro pasado a la función.En la línea siguiente,
r = +_;
+
delante convierte esa variable (_
) en un número o valor entero y lo asigna a la variabler
NO LO confunda con el
+=
operadorfuente
=+
en realidad son dos operadores=
es asignación+
y_
es nombre de variable.me gusta:
Los siguientes códigos lo ayudarán a mostrar el uso de
=+
convertir una cadena en int .ejemplo:
salidas 10
uso: Entonces aquí
y
está int5
por lo=+
contrario:
salidas 55
Donde como
_
es una variable.salidas 10
Además, sería interesante saber que también podría lograr lo mismo con
~
(si string es int string (float será redondeado a int) )también salidas 10
~
NO es bit a bit: invierte los bits de su operando. Lo hice dos veces sin ningún cambio de magnitud.fuente
x|0
para convertir doble a int; sin embargo, esto además de usar '~' tiene la penalización de restringir a números <2 ^ 32. + "2e15" no.x|0
es aún más rápido+
. Correcto ? buena técnica :). (2) Lo uso~
solo para mostrar OP que+
no es solo un signo que se puede usar ( yo mismo uso+
).|
mucho más rápido.No es
=+
. En JavaScript,+
significa cambiarlo a número.+'32'
devuelve 32.+'a'
devuelve NaN.Por lo tanto, puede
isNaN()
verificar si se puede cambiar a número.fuente
Es astuto.
Lo importante es entender que el carácter de subrayado aquí es en realidad un nombre de variable , no un operador.
El signo más delante de eso es obtener el valor numérico positivo de subrayado, es decir, convertir efectivamente la variable de subrayado para que sea un int. Podría lograr el mismo efecto con
parseInt()
, pero la conversión de signos más probablemente se use aquí porque es más concisa.Y eso solo deja el signo igual como solo una asignación de variable estándar.
Probablemente no esté escrito deliberadamente para confundir, ya que un programador Javascript experimentado generalmente reconocerá el guión bajo como una variable. Pero si no sabes que definitivamente es muy confuso. Ciertamente no lo escribiría así; No soy fanático de los nombres cortos de variables sin sentido en el mejor de los casos: si desea nombres cortos de variables en el código JS para ahorrar espacio, use un minificador; no lo escriba con variables cortas para comenzar.
fuente
_
es una variable.= + _ arrojará _ en un número.
Entonces
saldría número.
fuente
Supongo que quieres decir
r = +_;
? En ese caso, es la conversión del parámetro a aNumber
. Digamos que_
es '12 .3 ', luego+'12.3'
regresa12.3
. Por lo tanto, en la declaración citada+_
se asigna ar
.fuente
_
es solo un nombre de variable, se pasa como un parámetro de funciónhexbin.radius
y+
se convierte en númeroDéjame hacer un ejemplo igual a tu función.
y ejecuta esta función de ejemplo ... que genera
hexbin.radius ("1");
hexbin.radius (1);
hexbin.radius ([]);
hexbin.radius ('a');
hexbin.radius ({});
hexbin.radius (verdadero);
fuente
Asignará un nuevo valor a la variable del lado izquierdo.
fuente
+
antes delb
.+_
es casi equivalente deparseFloat(_)
. Observe queparseInt
se detendrá en caracteres no numéricos como el punto, mientrasparshFloat
que no lo hará.EXP:
Exp:
Muy pocas diferencias:
""
evalúa como a0
, mientras que parseInt () se evalúa comoNaN
fuente
parseInr(_)
lugar deparseFloat(_)
?float
, porque parseInt se detendrá en un carácter no numérico, parshFloat no lo hará. EXP:parseFloat(2.4) = 2.4
vsparseInt(2.4) = 2
.En pocas palabras,
+_
es equivalente a usar el constructor Number () .De hecho, incluso funciona en fechas:
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
También se puede encontrar más información en la sección MDN - Unary plus (+) :
fuente
En esta expresión:
_
lo tanto, se mantendrá "1" si fue así originalmente, peror
se convertirá en un número puro.Considere estos casos si uno quiere aplicar el + para la conversión numérica
Sin embargo, es el convertidor numérico más rápido. Apenas recomendaría uno para usarlo en exceso si lo utiliza.
parseInt/parseFloat
son buenas alternativas más legibles.fuente