Javascript语法:等号和逗号

时间:2013-04-08 14:35:48

标签: javascript variables syntax

我真的不知道该怎么称呼这个问题,也不知道我可以用什么来谷歌。我正在尝试理解D3.js库的源代码,并且我遇到了两个我根本无法理解的函数,因为我的语法是新的。

第一个是数字插值器:

function d3_interpolateNumber(a, b) {
  b -= a = +a;
  return function(t) { return a + b * t; };
}

第二行发生了什么?我们从b的值中减去a的值,然后......呃,你失去了我。这种语法有用吗?

让我感到困惑的另一件事,就是我在其他地方也看到的,是变量的右手赋值由几个用逗号分隔的变量组成的。如:

var i = d3.interpolators.length, f;

这是什么意思?这些片段取自https://github.com/mbostock/d3/blob/master/src/interpolate/number.js和。{ https://github.com/mbostock/d3/blob/master/src/interpolate/interpolate.js

3 个答案:

答案 0 :(得分:17)

你要问的第一行只是两个作业。它等同于:

a = +a;
b -= a;

+a正在使用unary plus operator将字符串转换为数字。我们正在将a转换为数字,然后从b中减去该数字(并将新值重新分配给b)。

您要问的第二位语法只是变量声明列表。例如:

var a, b, c; // Declares 3 variables, all initialised to undefined

这相当于:

var a;
var b;
var c;

在您的示例中,列表中的一个声明还包括一个赋值。任何数量都可以,所以这也是有效的:

var a, b = 1, c = true, d;

答案 1 :(得分:0)

第二行是

 b -= (a = +a);

这意味着:

  • a设置为+a(转换为数字)。将此值返回括号外。
  • 无论返回什么值,都从b。
  • 中减去它

a=+a //converts a to an int
b-=a // or b=b-a

请记住,作业会返回它们的价值。因此,alert(a=1)会提醒1


另一方面,

var i = d3.interpolators.length, f;

分裂为:

var i = d3.interpolators.length;
var f;

这基本上是一种说法“var applie to以下逗号分隔列表”

答案 2 :(得分:0)

赋值也是一个表达式,它返回分配的值。所以这个:

b -= a = +a;

与:

相同
b -= (a = +a);

或:

a = +a;
b -= a;

如果右侧确实是用逗号分隔的值,即:

var i = (d3.interpolators.length, f);

然后逗号运算符返回最后一个操作数的值,因此它将与:

相同
d3.interpolators.length;
var i = f;

但是,如果没有括号,逗号是声明变量之间的分隔符,而不是逗号运算符,因此它与:

相同
var i = d3.interpolators.length;
var f;