两种做法和if条件下的测试

Gae*_*anZ 1 javascript d3.js

我正在研究Mike Bokstok(d3js)高度优化的voronoi实现代码.

我不明白目前的测试:

if (!(m = (halfedges = cell.halfedges).length)) return;
Run Code Online (Sandbox Code Playgroud)

请参阅此处的代码:https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L87

  1. halfedges和m是变量后定义的行!它怎么样?
  2. 测试的目的是什么?如果有人使用错误类型的单元调用函数(没有类型数组的halfedges属性),它是防御性测试吗? 

小智 5

由于var提升,var可以放在函数的任何位置,但会在其范围内首先处理:

bla = 2;
var bla;

// is implicitly understood as:
var bla;
bla = 2;
Run Code Online (Sandbox Code Playgroud)

请注意,它正在使用=,而不是==.这是不是在测试mhalfedges,它是两个做作和测试cell.halfedges.length.

它可以改写为

if (!cell.halfedges.length) return;
halfedges = cell.halfedges;
m = halfedges.length;
Run Code Online (Sandbox Code Playgroud)