例子:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
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"
var _ = "1";
var r = +_;
r
现在是 1
,而不是 "1"
。
此外,根据算术运算符的MDN页面:
一元加号运算符在其操作数之前,并将其计算为其操作数,但如果它还不是数字,则尝试将其转换为数字。[...]它可以转换整数和浮点数的字符串表示,以及非字符串值
true
、false
和null
。支持十进制和十六进制(以"0x"
为前缀)格式的整数。支持负数(但不适用于十六进制)。如果它不能解析特定的值,它将计算为NaN
。
还指出:
一元加号是将某些东西转换为数字的最快和首选方法
+
真的意味着将其转换为数字,还是 +_
真的意味着 0+_
,在这种情况下,必须在添加到 0 之前对 _
进行转换? - colincameron+'12' === 12
(结果是一个数字),但是 0 + '12' === '012'
(结果是一个字符串)。但是请注意,0 - '12' === -12
。 - Kobi|
要快得多。可能在 IE 上会慢一些。 - Grijesh Chauhan这不是一个赋值运算符。
_
is just a parameter passed to the function.
hexbin.radius = function(_) {
// ^ It is passed here
// ...
};
On the next line r = +_;
+
infront casts that variable (_
) to a number or integer value and assigns it to variable r
不要将其与 +=
运算符混淆
=+
实际上是两个运算符,=
是赋值运算符,+
和_
是变量名。
例如:
i = + 5;
or
j = + i;
or
i = + _;
以下代码将帮助您展示如何使用=+
将一个字符串转换为整数。
示例:
y = +'5'
x = y +5
alert(x);
输出结果为10
用法:在这里y
是整数5
,因为使用了=+
否则:
y = '5'
x = y +5
alert(x);
输出55
其中_
是一个变量。
_ = + '5'
x = _ + 5
alert(x)
输出 10
此外, 如果字符串是一个整数字符串(如果是浮点数,则会四舍五入为整数),则您也可以使用~
来实现同样的目标。
y = ~~'5' // notice used two time ~
x = y + 5
alert(x);
还会输出10
~
是按位取反符号:翻转其操作数的所有位。我使用了两次,但并未改变幅度。
x|0
将双精度转换为整数;然而,这种方法以及使用 '~' 的缺点是限制在小于 2^32 的数字上。+"2e15" 则没有这个限制。 - Aki Suihkonenx|0
比 +
更快。对吧?这是个好技巧 : )。 (2) 我使用 ~
只是为了向 OP 表明 +
不仅仅是一个符号可以使用(我自己也使用 +
)。 - Grijesh Chauhan|
快多了。 - J.G.Sebring这并不是=+
。在JavaScript中,+
表示将其转换为数字。
+'32'
返回32。
+'a'
返回NaN。
因此,您可以使用isNaN()
来检查它是否可以转换为数字。
这是一个狡猾的例子。
重要的是要理解下划线字符实际上是一个变量名,而不是运算符。
加号表示获取下划线的正数值 - 即有效地将下划线变量转换为int。您可以使用parseInt()
实现相同的效果,但在这里使用加号转换更加简洁。
这只留下等号作为标准变量赋值。
这可能不是有意混淆的写法,因为有经验的Javascript程序员通常会将下划线识别为变量。但如果您不知道它是什么,那肯定非常令人困惑。我肯定不会像这样编写它;我从来不喜欢短小无意义的变量名 - 如果您想在JS代码中使用短小的变量名以节省空间,请使用缩小器;不要一开始就使用短小的变量名编写它。
= +_ 将 _ 转换为数字。
因此
var _ = "1",
r = +_;
console.log(typeof r)
我想你指的是 r = +_;
?如果是这样,那么它是将参数转换为一个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 );
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
b
前面加上 +
了。 - Attila O.+_
等同于使用 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。
-->
。 - Olegx= +_+ 0;
。 - tckmn