我想知道= +_运算符在 JavaScript 中的含义。它看起来像是在做作业。
例子:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
我想知道= +_运算符在 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 = +_;
+
尝试将任何_
内容转换为数字。_
只是一个变量名(不是运算符),它可以是a
等foo
。例子:
+"1"
将“1”转换为纯数字 1。
var _ = "1";
var r = +_;
r
是现在1
,不是"1"
。
此外,根据算术运算符的 MDN 页面:
一元加运算符在其操作数之前并计算其操作数,但如果它还不是,则尝试将其转换为数字。[...]它可以转换整数和浮点数的字符串表示形式,以及非字符串值
true
、false
和null
. 支持十进制和十六进制 ("0x"
-prefixed) 格式的整数。支持负数(虽然不支持十六进制)。如果它无法解析特定值,它将评估为NaN
.
还注意到,
一元加法是将某物转换为数字的最快和首选方法
它不是赋值运算符。
_
只是传递给函数的参数。
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
此外,
知道您也可以使用~
(if string is int string (float will be round of to int) 来实现 同样的事情会很有趣
y = ~~'5' // notice used two time ~
x = y + 5
alert(x);
也输出10
~
is bitwise NOT :反转其操作数的位。我做了两次,幅度没有变化。
不是=+
。在 JavaScript 中,+
表示将其更改为数字。
+'32'
返回 32。
+'a'
返回 NaN。
所以你可以用isNaN()
它来检查它是否可以变成数字。
这是一个偷偷摸摸的。
要理解的重要一点是,这里的下划线字符实际上是一个变量名,而不是一个运算符。
前面的加号是下划线的正数值——即有效地将下划线变量转换为int。您可以使用 实现相同的效果parseInt()
,但这里可能使用加号转换,因为它更简洁。
这只是将等号作为标准变量赋值。
它可能不是故意写来混淆的,因为有经验的 Javascript 程序员通常会将下划线识别为变量。但是如果你不知道那肯定是很混乱的。我当然不会那样写。在最好的情况下,我不喜欢短的无意义的变量名——如果你想在 JS 代码中使用短的变量名来节省空间,请使用缩小器;不要以短变量开头。
= +_ 将 _ 转换为数字。
所以
var _ = "1",
r = +_;
console.log(typeof r)
会输出数字。
我想你的意思是r = +_;
?在这种情况下,它是将参数转换为 a Number
。说_
是'12.3',然后+'12.3'
返回12.3
。所以在引用的语句+_
中赋值给r
.
_
只是一个变量名,作为函数的参数传递hexbin.radius
,并将+
其转换为数字
让我做一个和你的函数一样的例子。
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 boolean
1 number false
它将为左侧变量分配一个新值。
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
简单地说,+_
相当于使用Number()构造函数。
事实上,它甚至适用于日期:
var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000
演示:http: //jsfiddle.net/dirtyd77/GCLjd/
更多信息也可以在 MDN - 一元加号 (+) 部分找到:
一元加号运算符在其操作数之前并计算其操作数,但如果尚未转换为数字,则尝试将其转换为数字。虽然一元否定 (-) 也可以转换非数字,但一元加号是将某物转换为数字的最快和首选方法,因为它不对数字执行任何其他操作。它可以转换整数和浮点数的字符串表示形式,以及非字符串值 true、false 和 null。支持十进制和十六进制(“0x”前缀)格式的整数。支持负数(虽然不支持十六进制)。如果它无法解析特定值,它将评估为 NaN。
+_
几乎等同于parseFloat(_)
。请注意,parseInt
它将停在非数字字符(例如点)处,而parshFloat
不会。
经验:
parseFloat(2.4) = 2.4
vs
parseInt(2.4) = 2
vs
+"2.4" = 2.4
经验:
var _ = "3";
_ = +_;
console.log(_); // will show an integer 3
很少有区别:
""
计算为 a 0
,而 parseInt() 计算为NaN
在这个表达式中:
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
是更好的可读性替代方案。