JavaScript中的= + _是什么意思

Dim*_*try 251 javascript operators

我想知道= + _运算符在JavaScript中意味着什么.它看起来像是作业.

例:

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

mpm*_*mpm 394

r = +_;
Run Code Online (Sandbox Code Playgroud)
  • +试图将任何东西投射_到一个数字上.
  • _是只有一个变量名称(而不是操作者),它可以是a,foo

例:

+"1"
Run Code Online (Sandbox Code Playgroud)

将"1"强制转换为纯数字1.

var _ = "1";
var r = +_;
Run Code Online (Sandbox Code Playgroud)

r现在1,不是"1".

此外,根据算术运算符MDN页面:

一元加运算符在其操作数之前,并计算其操作数,但尝试将其转换为数字(如果尚未).[...]它可以转换整数和浮点数的字符串表示,以及非字符串值true,falsenull.支持十进制和十六进制( - "0x"前缀)格式的整数.支持负数(但不支持十六进制).如果它无法解析特定值,它将评估为NaN.

还注意到

unary plus是将某些东西转换为数字的最快和首选方式

  • @ c.cam108 - 不,他们表现不一样.一元加号将值转换为数字,但二进制加号不会:`+ '12'=== 12`(结果是数字),但是`0 + '12'==='012'`(结果是串).但请注意,'0 - '12'=== -12`. (17认同)
  • @ c.cam108参见[一元加运算符的MDN页面](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Arithmetic_Operators). (3认同)
  • +真的意味着强制转换为数字,或者`+ _`真的意味着'0 + _`,在这种情况下`_`必须在添加到0之前进行转换? (2认同)
  • "1" - "2"=== -1 (2认同)

Sta*_*arx 95

它不是赋值运算符.

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

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

不要与+=操作员混淆


Gri*_*han 54

=+实际上是两个运算符=是赋值+而且 _是变量名.

喜欢:

i = + 5;
or 
j = + i;
or 
i = + _;
Run Code Online (Sandbox Code Playgroud)

我的以下代码将帮助您显示=+字符串 转换为int的用法.
例:

y = +'5'
x = y +5
alert(x);
Run Code Online (Sandbox Code Playgroud)

产出10

使用:所以这里y是int 5因为=+
否则:

y = '5'
x = y +5
alert(x);
Run Code Online (Sandbox Code Playgroud)

输出55

_变量在哪里.

_ = + '5'
x = _ + 5
alert(x)
Run Code Online (Sandbox Code Playgroud)

产出10

另外, 知道你也可以实现同样的事情会很有趣~(如果string是int string (float将循环到int))

y = ~~'5'  // notice used two time ~
x = y  + 5
alert(x);
Run Code Online (Sandbox Code Playgroud)

也输出10

~是按位NOT:反转其操作数的位.我做了两次没有改变幅度.


Ovi*_*lia 16

事实并非如此=+.在JavaScript中,+意味着将其更改为数字.

+'32' 返回32.

+'a' 返回NaN.

因此,您可以使用isNaN()它来检查它是否可以更改为数字.


SDC*_*SDC 16

这是一个偷偷摸摸的.

要理解的重要一点是,这里的下划线字符实际上是变量名称,而不是运算符.

前面的加号是获得下划线的正数值 - 即有效地将下划线变量转换为int.您可以使用相同的效果parseInt(),但这里可能会使用加号,因为它更简洁.

而这只是将等号作为标准变量赋值.

它可能不是故意编写的混淆,因为有经验的Javascript程序员通常会将下划线视为变量.但如果你不知道它肯定是非常令人困惑的.我当然不会这样写; 在最好的情况下,我不喜欢简短无意义的变量名称 - 如果你想在JS代码中使用短变量名来节省空间,可以使用缩小器; 不要用短变量来编写它.


小智 12

= + _会将_转换为数字.

所以

var _ = "1",
   r = +_;
console.log(typeof r)
Run Code Online (Sandbox Code Playgroud)

会输出数字.


Koo*_*Inc 9

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


rab*_*rab 6

_只是一个变量名,作为函数的参数传递hexbin.radius,并将+其转换为数字

让我像你的功能一样做一个例子.

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}
Run Code Online (Sandbox Code Playgroud)

并运行此示例函数..输出

hexbin.radius("1");

1 string
1 number false 
Run Code Online (Sandbox Code Playgroud)

hexbin.radius(1);

1 number
1 number false
Run Code Online (Sandbox Code Playgroud)

hexbin.radius([]);

[] object
0 number false
Run Code Online (Sandbox Code Playgroud)

hexbin.radius('a');

a string
NaN number true
Run Code Online (Sandbox Code Playgroud)

hexbin.radius({});

Object {} object
NaN number true
Run Code Online (Sandbox Code Playgroud)

hexbin.radius(true);

true boolean
1 number false
Run Code Online (Sandbox Code Playgroud)


Amr*_*dra 5

它会为左侧变量赋一个新值.

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
Run Code Online (Sandbox Code Playgroud)