什么是=+;?JavaScript中的平均值

什么是=+;?JavaScript中的平均值,javascript,operators,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; }; +尝试将\u中的任何内容转换为数字 \uu只是一个变量名(不是运算符),它可以是a,fo

我想知道=+\操作符在JavaScript中是什么意思。它看起来像是在做作业

例如:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};
  • +
    尝试将
    \u
    中的任何内容转换为数字
  • \uu
    只是一个变量名(不是运算符),它可以是
    a
    foo
示例:

+"1"
将“1”转换为纯数字1

var _ = "1";
var r = +_;
r
现在是
1
,而不是
“1”

此外,根据该报告:

一元加号运算符位于其操作数之前,并计算为其 操作数,但尝试将其转换为数字(如果不是) 已经。[…]它可以转换整数和 浮动,以及非字符串值
true
false
null
。 十进制和十六进制(
“0x”
-前缀)格式的整数都是 支持。支持负数(但不支持十六进制)。如果是 无法分析特定值,它将计算为
NaN

还值得注意的是

一元加号是将某物转换成数字的最快和首选方式


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

+'32'
返回32

+'a'
返回NaN


因此,您可以使用
isNaN()
检查是否可以将其更改为数字。

=+
实际上是两个运算符
=
是赋值,
+
是变量名

比如:

i = + 5;
or 
j = + i;
or 
i = + _;
下面的代码将帮助您演示如何使用
=+
将字符串转换为int。
例如:

y = +'5'
x = y +5
alert(x);
输出10

使用:因此这里的
y
是int
5
,因为
=+

否则:

y = '5'
x = y +5
alert(x);
输出55

其中as
\uu
是一个变量

_ = + '5'
x = _ + 5
alert(x)
输出10

此外, 如果知道您也可以通过
~
实现同样的效果,那将很有趣(如果string是int string(float将是到int的四舍五入))

还输出10


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

它不是赋值运算符

  • 只是传递给函数的一个参数

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
    
  • 在下一行
    r=+\u
    +
    将该变量(
    \u
    )强制转换为一个数字或整数值,并将其分配给变量
    r


不要将其与
+=
运算符相混淆

它将为左侧变量分配一个新值

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

我想你的意思是
r=+\ux?在这种情况下,它将参数转换为一个
数字
。假设
是'12.3',然后
+'12.3'
返回
12.3
。因此,在引用的语句中,
+\u
被分配给
r

=+\u将u转换为一个数字

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
所以

将输出数字。

这是一个鬼鬼祟祟的数字

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

前面的加号表示下划线的正数值,即有效地将下划线变量转换为int。使用
parseInt()
可以达到相同的效果,但此处可能使用加号转换,因为它更简洁

这样就只剩下等号作为一个标准变量赋值了


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

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

让我做一个和你的函数一样的例子

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}
然后运行这个示例函数。。哪个输出

六边半径(“1”)

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
hexbin.半径(1)

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
hexbin.半径([])

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
hexbin.半径('a')

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
hexbin.radius({})

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
六边半径(真)

1 string
1 number false 
1 number
1 number false
[] object
0 number false
a string
NaN number true
Object {} object
NaN number true
true boolean
1 number false
在此表达式中:

r = +_;
  • “+”在这里充当一元运算符,尝试转换右操作数的值。它不转换操作数,而是转换计算值。所以如果原来是这样的话,
    \uu
    将保持为“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
是可读性更好的选择。

+\uCode>几乎相当于
parseFloat(\uCode>)。请注意,
parseInt
将在非数字字符(如点)处停止,而
parshFloat
将不会停止

经验:

经验:

几乎没有区别:

  • 空字符串
    的计算结果为
    0
    ,而parseInt()的计算结果为
    NaN
  • 有关更多信息,请查看此处:

    • 简单地说,
      +\ucode>等同于使用构造函数

      事实上,它甚至在日期上起作用:

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


      有关更多信息,请参见:

      一元加号运算符位于其操作数之前