tablas - ¿Qué significa=+_en JavaScript?
recorrer tabla javascript (12)
= + _ lanzará _ en un número.
Asi que
var _ = "1",
r = +_;
console.log(typeof r)
sería el número de salida.
Me preguntaba qué significa el operador = + _ en JavaScript. Parece que hace asignaciones.
Ejemplo:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
Asignará un nuevo valor a la variable del lado izquierdo un 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
En esta expresión:
r = +_;
- ''+'' actúa aquí como un operador unario que intenta convertir el valor del operando correcto. No convierte el operando sino el valor evaluado. Entonces
_
se mantendrá "1" si fue tan original pero lar
se convertirá en número puro.
Considere estos casos si uno quiere aplicar el + para la conversión 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
Sin embargo, es el convertidor numérico más rápido que difícilmente recomendaría uno para sobreutilizarlo si lo utilizo. parseInt/parseFloat
son buenas alternativas más legibles.
En pocas palabras, +_
es equivalente a usar el constructor Number() .
De hecho, incluso funciona en fechas:
var d = new Date(''03/27/2014'');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
También puede encontrar más información en MDN - Unary plus (+) section :
El operador unario plus precede a su operando y evalúa su operando, pero intenta convertirlo en un número, si no lo está ya. Aunque la negación unaria (-) también puede convertir los no números, unary plus es la forma más rápida y preferida de convertir algo en un número, porque no realiza ninguna otra operación en el número. Puede convertir representaciones de cadenas de enteros y flotantes, así como los valores no de cadena verdadero, falso y nulo. Se admiten enteros en formato decimal y hexadecimal ("0x" -prefixed). Los números negativos son compatibles (aunque no para hex). Si no puede analizar un valor particular, se evaluará a NaN.
Es una astuta
Lo importante a entender es que el carácter de subrayado aquí es en realidad un nombre variable , no un operador.
El signo más que está delante de eso es obtener el valor numérico positivo del guión bajo, es decir, convertir la variable de guión bajo en un int. Podría lograr el mismo efecto con parseInt()
, pero es probable que se use aquí la conversión de signos positivos porque es más concisa.
Y eso solo deja el signo igual como una asignación de variable estándar.
Probablemente no esté escrito deliberadamente para confundirlo, ya que un programador de Javascript experimentado generalmente reconocerá el subrayado como una variable. Pero si no sabes que es definitivamente muy confuso. Ciertamente no lo escribiría así; No soy un fanático de los nombres cortos de las 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 escribas con variables cortas para empezar.
No es =+
. En JavaScript, +
significa cambiarlo en número.
+''32''
devuelve 32.
+''a''
devuelve NaN.
Por lo tanto, puede usar isNaN()
para verificar si se puede cambiar a número.
No es un operador de asignación.
_
es solo un parámetro pasado a la función.hexbin.radius = function(_) { // ^ It is passed here // ... };
En la siguiente línea
r = +_;
+
enfrente convierte esa variable (_
) a un número o valor entero y la asigna a la variabler
NO LO CONFUSE CON +=
operador
Supongo que te refieres a r = +_;
? En ese caso, es la conversión del parámetro a un Number
. Diga _
es ''12 .3 '', luego +''12.3''
devuelve 12.3
. Así que en el enunciado citado +_
se asigna a r
.
+_
es casi equivalente a parseFloat(_)
. Observe que parseInt
se detendrá en un carácter no numérico como un punto, mientras que parshFloat
no lo hará.
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
Muy pocas diferencias:
- La cadena vacía
""
evalúa como un0
, mientras que parseInt () se evalúa comoNaN
- Para obtener más información, consulte aquí: parseInt vs unary plus - cuándo usar cuál
=+
son en realidad dos operadores =
es asignación y +
y _
es el nombre de la variable.
me gusta:
i = + 5;
or
j = + i;
or
i = + _;
Mis siguientes códigos te ayudarán a mostrar el uso de =+
para convertir una cadena en int .
ejemplo:
y = +''5''
x = y +5
alert(x);
salidas 10
uso: Entonces aquí y
es int 5
debido a =+
de otra manera:
y = ''5''
x = y +5
alert(x);
salidas 55
Donde como _
es una variable.
_ = + ''5''
x = _ + 5
alert(x)
salidas 10
Además, sería interesante saber que también podría lograr lo mismo con ~
(si string es int string (float será round of to int) )
y = ~~''5'' // notice used two time ~
x = y + 5
alert(x);
también salidas 10
~
es bit a bit NO: invierte los bits de su operando. Lo hice dos veces sin ningún cambio en la magnitud.
_
es solo un nombre de variable, pasado como parámetro de la función hexbin.radius
, y +
lo convierte en número
Déjame hacer un ejemplo igual a tu función.
var hexbin = {},r ;
hexbin.radius = function(_) {
if (!arguments.length)
return r;
console.log( _ , typeof _ )
r = +_;
console.log( r , typeof r , isNaN(r) );
}
y ejecute esta función de ejemplo ... qué salidas
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 (verdadero);
true boolean
1 number false
r = +_;
-
+
intenta lanzar lo que sea_
a un número. -
_
es solo un nombre de variable (no un operador), podría sera
,foo
etc.
Ejemplo:
+"1"
Reparto "1" al número puro 1.
var _ = "1";
var r = +_;
r
es ahora 1
, no "1"
.
Además, de acuerdo con la página de MDN sobre operadores aritméticos :
El operador unario plus precede a su operando y evalúa a su operando, pero intenta convertirlo en un número, si no lo está ya . [...] Puede convertir representaciones de cadenas de enteros y flotantes, así como los valores no de cadena
true
,false
ynull
. Se admiten enteros en formato decimal y hexadecimal ("0x"
-prefixed). Los números negativos son compatibles (aunque no para hex). Si no puede analizar un valor particular, se evaluará aNaN
.
También se observa que
Unary Plus es la forma más rápida y preferida de convertir algo en un número.