我想知道= + _运算符在JavaScript中的含义。看起来像是在做作业。
例:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
x= +_+ 0;
我想知道= + _运算符在JavaScript中的含义。看起来像是在做作业。
例:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
x= +_+ 0;
Answers:
r = +_;
+
尝试将任何内容强制_
转换为数字。_
只是一个变量名(不是运算符),可以是a
,foo
等等。例:
+"1"
将“ 1”强制转换为纯数字1。
var _ = "1";
var r = +_;
r
现在1
,不是"1"
。
一元加号运算符在其操作数之前并求值为其操作数,但尝试将其转换为数字(如果尚未转换为数字)。[...]它可以转换整数和浮点数的字符串表示,以及非字符串值
true
,false
和null
。支持十进制和十六进制(带"0x"
前缀)格式的整数。支持负数(尽管不支持十六进制)。如果无法解析特定值,则将求值为NaN
。
还应注意
一元加号是将某物转换为数字的最快且首选的方式
+_
真的意味着0+_
,在这种情况下_
必须强制转换为0?
+'12' === 12
结果为数字),但0 + '12' === '012'
(结果为字符串)。但是请注意0 - '12' === -12
。
=+
实际上是两个运算符=
是赋值,+
并且 _
是变量名。
喜欢:
i = + 5;
or
j = + i;
or
i = + _;
我的以下代码将帮助您展示如何使用of =+
将字符串 转换为int。
例:
y = +'5'
x = y +5
alert(x);
输出10
用途:因为其他原因,这里y
为int :5
=+
y = '5'
x = y +5
alert(x);
输出55
其中as _
是变量。
_ = + '5'
x = _ + 5
alert(x)
输出10
另外,
很有趣的是,您也可以用~
(如果string是int string (float将舍入为int的整数)) 实现相同的操作
y = ~~'5' // notice used two time ~
x = y + 5
alert(x);
也输出10
~
是按位NOT:反转其操作数的位。我做了两次,幅度没有变化。
x|0
将double转换为int。但是,这以及使用'〜'都会限制数字<2 ^ 32。+“ 2e15”不。
x|0
这会更快+
。对吗 好技术:)。(2)我~
只是为了表明OP,+
不仅可以使用符号(我本人+
也可以使用)。
|
很大。
这是一个偷偷摸摸的。
要了解的重要一点是,这里的下划线字符实际上是变量名,而不是运算符。
前面的加号得到下划线的正数值-即有效地将下划线变量转换为整数。使用可以达到相同的效果parseInt()
,但是这里使用加号强制转换是因为它更简洁。
这只是将等号作为标准变量赋值。
它可能不是故意写出来的,因为经验丰富的Javascript程序员通常会将下划线视为变量。但是,如果您不知道那肯定很令人困惑。我当然不会那样写。最好的情况下,我不喜欢使用简短的无意义的变量名-如果您想在JS代码中使用简短的变量名来节省空间,请使用缩小符;不要以短变量开头。
_
的变量。
= + _将_转换为数字。
所以
var _ = "1",
r = +_;
console.log(typeof r)
将输出数字。
_
只是一个变量名,作为function的参数传递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);
true boolean
1 number false
+_
几乎是等同的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
parseInr(_)
而不是您要说parseFloat(_)
?
float
因为parseInt将以非数字字符停止,所以parshFloat不会。经验值:parseFloat(2.4) = 2.4
vs parseInt(2.4) = 2
。
简而言之,+_
等效于使用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。
在此表达式中:
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
是更好的可读性更好的选择。
-->