= +_ 在 JavaScript 中是什么意思

IT技术 javascript operators
2021-01-22 14:08:05

我想知道= +_运算符在 JavaScript 中的含义。看起来它在做作业。

例子:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};
6个回答
r = +_;
  • +尝试将任何_内容转换为数字。
  • _只是一个变量名(不是一个运算符),它可以是afoo等等。

例子:

+"1"

将“1”转换为纯数字 1。

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

r是现在1,不是"1"

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

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

还应注意的是

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

使用 perl 的默认变量 $_ 看起来很漂亮
2021-03-15 14:08:05
@c.cam108 请参阅一元加运算符的 MDN 页面
2021-03-21 14:08:05
+ 真的意味着转换为数字,还是+_真的意味着0+_,在这种情况下_必须在添加到 0 之前转换?
2021-04-01 14:08:05
@c.cam108 - 不,它们的行为不同。一元加号将值转换为数字,但二进制加号不会:(+'12' === 12结果是一个数字),但是0 + '12' === '012'(结果是一个字符串)。但是请注意,0 - '12' === -12.
2021-04-04 14:08:05
@juzerali 当然,但这不是一个好习惯。尝试使用加法;)
2021-04-09 14:08:05

它不是赋值运算符。

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

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

不要将它与+=操作员混淆

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

喜欢:

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

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

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

输出10

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

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

输出55

其中 as_是一个变量。

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

输出10

此外, 知道你也可以用~(如果字符串是int字符串(浮点数将舍入为整数)实现同样的事情会很有趣

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

也输出10

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

实际上我只是在 jsperf 上测试了它——'|0' 18M 操作,'+' 19M 操作;性能可能因浏览器而异。jsperf.com/strtoint
2021-03-14 14:08:05
我经常使用x|0将 double 转换为 int;然而,这以及使用 '~' 都会受到限制为 <2^32 的数字的惩罚。+"2e15" 没有。
2021-03-16 14:08:05
很难说——虽然有 jsperf 是想要测量它的。OTOH这两个算符有着完全不同的含义。如果只需要一个数字(而不是整数)'+' 无论如何都要短一个字符。
2021-03-21 14:08:05
@AkiSuihkonen 哦,天哪,刚刚在 Firefox 中进行了 jsperf 测试,差异很大..|快了很多。
2021-03-24 14:08:05
@AkiSuihkonen 是的,我相信x|0它会更快+正确吗?不错的技术:)。(2) 我~只是为了展示 OP,+它不仅是一个可以使用的标志(我自己使用+)。
2021-04-02 14:08:05

不是=+在 JavaScript 中,+意味着将其转换为数字。

+'32' 返回 32。

+'a' 返回 NaN。

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

这是一个偷偷摸摸的。

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

前面的加号是获得下划线的正数值——即有效地将下划线变量转换为整数。您可以使用 实现相同的效果parseInt(),但此处可能使用加号转换,因为它更简洁。

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

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

+1,因为您是这里唯一明确指出这_是一个变量的人。
2021-03-30 14:08:05
@TRiG Starx 的回答怎么样,这不是 tl;dr?
2021-04-04 14:08:05