JavaScript中的= +是什么意思?

我想知道= + _运算符在JavaScript中意味着什么。 它看起来像分配。

例:

hexbin.radius = function(_) { if (!arguments.length) return r; r = +_; dx = r * 2 * Math.sin(Math.PI / 3); dy = r * 1.5; return hexbin; }; 
 r = +_; 
  • +试图将任何_作为一个数字。
  • _只是一个variables名(不是操作符),可以是“a”,“foo”等

例:

 +"1" 

投1“纯数字1。

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

r现在是1 ,而不是"1"

而且,根据算术操作符的MDN页面 :

一元加运算符在它的操作数之前,并且计算它的操作数,但是试图把它转换成一个数字(如果它还没有的话)[…]它可以转换整数和浮点数的string表示forms,以及非string值truefalsenull 。 支持十进制和hex( "0x"前缀)格式的整数。 负数是支持的(虽然不是hex)。 如果它不能parsing一个特定的值,它将评估为NaN

还有人指出

一元加号是将某些东西转换为数字的最快和首选方式

这不是一个赋值操作符。

  • _只是传递给函数的参数。

     hexbin.radius = function(_) { // ^ It is passed here // ... }; 
  • 在下一行r = +_; + infront将variables( _ )转换为数字或整数值,并将其赋值给variablesr

不要用+=运算符来确认它

=+实际上是两个运算符=赋值和+_是variables名称。

喜欢:

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

我的下面的代码将帮助您显示使用=+string转换为int
例:

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

输出10

使用:所以这里y是int 5因为=+
除此以外:

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

输出55

其中_是一个variables。

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

输出10

此外,知道你也可以用~实现同样的事情(如果string是int string (float将被舍入为int)

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

也输出10

~是按位NOT:反转操作数的位。 我做了两次,没有变化的幅度。

这不是=+ 。 在JavaScript中, +表示将其更改为数字。

+'32'返回32。

+'a'返回NaN。

所以你可以使用isNaN()来检查它是否可以改成数字。

这是一个鬼鬼祟祟的。

重要的是要理解的是这里的下划线字符实际上是一个variables名 ,而不是一个操作符。

前面的加号是获得下划线的正数值 – 即有效地将下划线variables转换为整数。 你可以用parseInt()来达到同样的效果,但是这里使用加号的方法很简单。

这就等于只是一个标准的variables赋值。

这可能不是故意写的混淆,因为有经验的Javascript程序员通常会将下划线识别为variables。 但是,如果你不知道这肯定是非常混乱的。 我当然不会这样写, 在最好的时候,我并不喜欢简短无意义的variables名 – 如果你想在JS代码中使用简短的variables名来节省空间,可以使用缩小器; 不要用简短的variables来写。

= + _将会投入一个数字。

所以

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

会输出数字。

我想你的意思是r = +_; ? 在这种情况下,它将参数转换为Number 。 说_是'12.3',那么+'12.3'返回12.3 。 所以在引用的语句中, +_被分配给r

_只是一个variables名,作为函数hexbin.radius的parameter passing,并将其转换为数字

让我做一个像你的function一样的例子。

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

并运行这个输出示例函数..

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 

它会给左边的variables赋一个新的值。

 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 

+_几乎等同parseFloat(_) 。 观察parseInt将停止在非数字字符,如点,而parshFloat不会。

EXP:

  parseFloat(2.4) = 2.4 vs parseInt(2.4) = 2 vs +"2.4" = 2.4 

经验:

 var _ = "3"; _ = +_; console.log(_); // will show an integer 3 

很less有区别:

  • 空string""评估为0 ,而parseInt()评估为NaN
  • 欲了解更多信息看看这里: parseInt vs一元加号 – 何时使用哪个

在这个expression式中:

 r = +_; 
  • “+”在这里作为一个一元运算符,试图转换右操作数的值。 它不转换操作数,而是转换评估值。 所以_将保持“1”,如果它是原来的,但r会变成纯数字。

考虑这些情况是否需要应用+进行数字转换

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

虽然,这是最快的数字转换器,我几乎不推荐过度使用它,如果使用的话。 parseInt/parseFloat是更可读的替代scheme。

简单地说, +_ 等同于使用Number()构造函数。

事实上,它甚至可以在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/


更多信息也可以在MDN上find- 一元加(+)部分 :

一元加运算符在它的操作数之前,并且计算它的操作数,但是试图把它转换成一个数字(如果它还没有的话)。 尽pipe一元否定( – )也可以转换非数字,但一元加数是将某些东西转换为数字的最快和首选方式,因为它不会对数字执行任何其他操作。 它可以转换整数和浮点数的string表示forms,以及非string值true,false和null。 支持十进制和hex(“0x”前缀)格式的整数。 负数是支持的(虽然不是hex)。 如果它不能parsing一个特定的值,它将评估为NaN。